タグ

lambda-calculusに関するnabinnoのブックマーク (8)

  • elispのlambdaにもcalleeを - 技術日記@kiwanami

    いろいろ準備中です。小ネタで。 JavaScript には arguments.callee という、「今いる関数」が入っている便利なプロパティがあります。 arguments.callee - JavaScript | MDN これが非常に便利で、最近elispでも欲しくなってきたのでこう書いてみました。 (defmacro jslambda (args &rest body) (let ((argsyms (loop for i in args collect (gensym)))) `(lambda (,@argsyms) (lexical-let (callee) (setq callee (lambda( ,@args ) ,@body)) (funcall callee ,@argsyms))))) 名前がアレですが、とりあえず普通に lambda の代わりとして書けます。 (

    elispのlambdaにもcalleeを - 技術日記@kiwanami
  • Emacs Lisp のダメなところ - あどけない話

    Emacs Lisp をこよなく愛する僕の目から、Emacs Lisp がダメだと思うところをまとめておきます。 文化的な問題 Emacs Lisper の多くは、Lisp が好きで使っているのではなく、Emacs が好きだからしかたなく使っているのでしょう。当は C で書きたいのに、無理して Lisp を利用している感じです。 そのため、Emacs に付いてくる Emacs Lisp のコードは、Lisp らしくないものがほとんどです。単に C での発想を Lisp で表現しています。 これらのコードは、読みこなせないぐらい関数が大きく、副作用のある部分とない部分が分離されていません。また高階関数を用いて、データ構造を走査するコードと実際に仕事をするコードを分離するという意識も低いようです。 GoogleMapReduceという論文のお陰で、Lisp の写像関数(map)と畳込み

    Emacs Lisp のダメなところ - あどけない話
  • function の役割り - Emacs Lisp あれこれ

    関数をクオートするのには quote (') より function (#') の方がよいとされている。 しかし、どういう利点があるのかあまり理解されていない。 C 言語のソースを見ると、quote と function はまったく同じ実装になっている。 つまり、実行時の役割は完全に一緒である。 以下の例では、auto-fill-function をいうシンボルをクオートしている。 このようにシンボルをクオートする場合は、 「以下のシンボルは関数ですよ」という「コメント」としての役割はあっても、 クオートという意味においてはまったく違いはない。 (setq auto-fill-function (function my-auto-fill-function)) では何が嬉しいのか? それは、byte compile のときに、 quote でクオートするときよりも適切に byte comp

  • GNU Emacs Lispリファレンスマニュアル: 関数

    URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=What%20Is%20a%20Function" "texi/elisp21/関数とはなにか"へのコメント(無し) 一般的には、関数とは、引数(arguments)と呼ばれる値を与えられ、 計算を行うための規則です。 この計算結果を関数の値と呼びます。 計算では副作用、つまり、変数の値やデータ構造の内容に継続する変更 を伴うこともできます。 Emacs Lispの関数や関数のようなオブジェクトに関する重要な用語をあげておきます。 関数 Emacs Lispでは、Lispプログラムにおいて引数に適用可能ものは なんであれ関数(function)である。 Lispで書いた関数を意味する場合もある。 スペシャルフォームやマクロは関数ではない。 基関数 基関数(primi

  • カリー化 - Wikipedia

    カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること(あるいはその関数のこと)である。クリストファー・ストレイチーにより論理学者ハスケル・カリーにちなんで名付けられたが、実際に考案したのはMoses Schönfinkelとゴットロープ・フレーゲである。 ごく簡単な例として、f(a, b) = c という関数 f があるときに、F(a) = g(ここで、g は g(b) = c となる関数である)という関数 F が、f のカリー化である。 関数 f が の形のとき、 をカリー化したものを とすると、 の形を取る。uncurryingは、これの逆の変換である。 理論計算機科学の分野では、カリー化を利用すると、複数の引数をとる関数を、一つ

  • アロンゾ・チャーチ - Wikipedia

    チャーチの業績は多岐にわたっているが、主なものとしては、 「チャーチ=チューリングのテーゼ」の提唱 [1] 1階述語論理の決定不可能性証明 [2] ラムダ計算の創案 [4] が挙げられる。この他にも、公理的集合論、型理論、内包論理に関する業績があり、また数理論理学分野以外では、微分方程式論やラプラス変換に関する仕事もある。 チャーチは『記号論理学雑誌』(Journal of Symbolic Logic)の創刊者の一人に名を連ねており、創刊された1936年から1979年にかけて、同誌のリヴュー部門編集者を務めた。この間に彼がリヴューを執筆した論文は膨大な量にのぼり、この仕事はチャーチのライフワークともいえるものだった。チャーチは1967年にプリンストン大学からカリフォルニア大学ロサンゼルス校へと移ったが、これは、プリンストンがこのリヴュー編集への支援を打ち切ったことが原因だと言われている。

  • ラムダ計算 - Wikipedia

    この記事には参考文献や外部リンクの一覧が含まれていますが、脚注による参照が不十分であるため、情報源が依然不明確です。 適切な位置に脚注を追加して、記事の信頼性向上にご協力ください。(2020年5月) ラムダ計算(ラムダけいさん、英語: lambda calculus)は、計算模型のひとつで、計算の実行を関数への引数の評価(英語: evaluation)と適用(英語: application)としてモデル化・抽象化した計算体系である。ラムダ算法とも言う。関数を表現する式に文字ラムダ (λ) を使うという慣習からその名がある。アロンゾ・チャーチとスティーヴン・コール・クリーネによって1930年代に考案された。1936年にチャーチはラムダ計算を用いて一階述語論理の決定可能性問題を(否定的に)解いた。ラムダ計算は「計算可能な関数」とはなにかを定義するために用いられることもある。計算の意味論や型理論

  • 1