タグ

ブックマーク / qiita.com/esumii (3)

  • 環境とクロージャを用いた、より効率的な関数型プログラミング言語の定義&実装の仕方の例 - Qiita

    関数型プログラミング言語の定義&実装の仕方の例で「需要があれば後で書く」と書いた、「より効率的な実装」です(数件:-)の需要があったので)。前の記事は読んでいると仮定します。 さて、前の実装では、関数function(x){E}を値vに適用すると、体である式Eの抽象構文木をすべて辿って、その中の変数xをすべてvで置き換えた式を作っていました(subst)。これは明らかに非効率的です。関数を呼び出すたびに、体の抽象構文木を作り直しているのですから! そこで、変数に当に値を代入して新しい式を作り直すかわりに、どの変数にどういう値が与えられた(束縛(binding)と言います)のか、覚えておくデータ構造を用意します。これを環境(environment)と言います。 環境は連想リストでもハッシュテーブルでも探索木でも、変数から値への対応(写像)を表していれば、何でも実装することができます。た

    環境とクロージャを用いた、より効率的な関数型プログラミング言語の定義&実装の仕方の例 - Qiita
    rydot
    rydot 2015/02/08
  • 関数型プログラミング言語の定義&実装の仕方の例 - Qiita

    前置き:何となく成り行きで何か書かないと心苦しいので、殴り書きレベル & 文才がなくてつまらない & 関数型言語の授業等を受けたことがある方にはものすごく当たり前の教科書的内容ですみませんが、取り急ぎ自分が容易に書けることを書きます。(この記事に直接の関係がある)質問があれば、(すぐに反応できない場合もあると思いますが)なるべく答えます。誤植などの指摘も助かります。 さて、プログラマならば誰しも一度は「オレオレ・オリジナル・プログラミング言語を作りたい」という欲求を抱きますよね。(抱きますよね?) そのとき、文字列レベルの文法(具象構文(concrete syntax)と言います)はわりと誰でも(?)考えられますが、それが木構造レベルでどういう風に表されて(抽象構文(abstract syntax)と言います)、どう動作するのか(操作的意味論(operational semantics)と

    関数型プログラミング言語の定義&実装の仕方の例 - Qiita
  • 「関数型言語」に関するFAQ形式の一般的説明 - Qiita

    前置き: 特定の言語ではなく、関数型言語一般に関する説明です。 ここに書くのが良いのかわかりませんが、それを考える時間ももったいないのでとりあえず書きます。必要が生じたら移転します。 皆様のご要望や自分の気分(?)により随時加筆修正します。 「それは違うんじゃない?」というご指摘はもちろん、初心者の方の素朴な疑問・質問や、「ここがよくわからない」「こういうことも書いてほしい」みたいなコメントも歓迎します。すぐに対応できない場合もあると思いますがすみません。Twitterのesumii宛でも構いませんが、コメントのほうが他の方も見つけやすくて良いと思います。当然ながら(他者に対しても)誹謗中傷等はご遠慮ください。 いただいたコメントはほぼ文に反映していますので、文を読むために、必ずしもコメントを読む必要はありません。もちろん、興味と余裕(?)があればコメントも読んでいただければ非常に有用

    「関数型言語」に関するFAQ形式の一般的説明 - Qiita
  • 1