2016-09-02 18 views
1

SchemeやHaskellのような関数型プログラミング言語の擬似コードを書くには? 私が検索したのは、CスタイルまたはPythonスタイルの擬似コードでした。関数型プログラミング言語の疑似コードの書き方は?

+5

私は、これが擬似コードを書くためにどの機能言語に依存しているかと非常に依存していると思います。 Haskell、ocaml、fsharpはerlang、clojure/lispとはまったく異なるアプローチをしています。したがって、擬似コードは異なるように見えます。 haskellの場合は、ほとんどが型シグネチャを記述し、散文のアルゴリズムを説明します。動的言語については、私はあなたに何かヒントを与えるために十分な経験がありません – epsilonhalbe

+4

なぜそれを書いてみませんか?誰かが「私に擬似コードを表示する」と言っているのですか、あるいは機能的なスタイルでコードを設計する方法を理解しようとしていますか?後者の場合、疑似コードが間違っている可能性があります。あなたの質問に対するもう少しの背景が役に立つでしょう。 –

+2

機能コードは非常にコンパクトで高水準なので、小さなスペースではアルゴリズム全体に合わせて擬似コードを不要にすることができます(必ずしもそうとは限りません)。 IMOの擬似コードは、あまりにも冗長な構文(理解に害を与える)がある場合や、退屈な部分をスキップしたい場合(スタブがここでうまくいく)、より便利です。 – chi

答えて

1

私は機能的なスタイルで擬似コードでアルゴリズムを書いているなら、私はミックスと一致する言語が、一貫して使用するかもしれませんが:

  • せバインド変数
  • 関数適用
  • マップとたとえば、

テイクを折る、ハッシュ関数:

hash data = 
    let blocks = chunksOf blockSize (preprocess data) 
    foldr updateContext initialContext blocks 
4

SICPやその他のチュートリアルでは、楽観的なプログラミングがあります。擬似コードの代わりに、物事に名前をつけ、彼らが取るかもしれない議論を提供するだけです。ですから、最低から最高周波数にソートされたノードのリストのうち、ハフマンツリーを作りたいと想像:

(define (huffman nodes) 
    (if (single-node? nodes) 
     (first nodes) 
     (let ([new-node 
      (make-node (first nodes) 
         (second nodes))]) 
     (huffman (insert-sorted new-node   
           (cddr nodes)))))) 

これは完全なアルゴリズムであり、それはそうであっても、結果として、実際のコードの一部となりますそれは実際の擬似コードでもありません。 single-node?make-nodeinsert-sortedは定義されていません。Schemeではエラーが発生しますが、CLでは実際にこれを使用することができ、デバッガにジャンプして基本的にすべての作業が終了するまで実行を続行しながら欠落部分を実装します。

私は、Haskellや他のプログラミング言語では、機能的なものだけでなく、このような楽観的なプログラミングを行うことができます。最終的な結果には小さな変化があるかもしれませんが、他のリファクタリングではそれ以上の変化はありません。

関連する問題