タグ

読むとY Combinatorに関するNobuhisaのブックマーク (3)

  • Y combinator. そして末尾再帰に取り付かれる - rayfillのプログラムネタ帳

    不動点演算子といってラムダ計算やらコンビネータ理論やらのものらしいです。 ちゃんと調べてないのでよくわかってません(笑) ただ、これを使うと無名関数を再帰することができる、ということです。 で自分で実装して考えてみる。 まずは再帰のお供、fact関数。 (defun fact (n) (if (<= n 1) 1 (* n (fact (- n 1))))) 末尾再帰にもなっていませんがとりあえず実装。 ここから進めていきましょう。 この関数をlambda関数にした場合、何が使えなくて再帰できないのか? そう、関数名fact、というか関数自身です。 んじゃどうすればいける?と考えると・・・ないものは無いんで外部から差し込むしかないよなーということになります。 つまり自分自身を引数として受け取って(なんか話が矛盾してきた!(笑))それをfuncallすれば再帰できるはず、ということで定義した

    Y combinator. そして末尾再帰に取り付かれる - rayfillのプログラムネタ帳
    Nobuhisa
    Nobuhisa 2009/07/17
    Y Combinator と末尾再帰の最適化
  • combinator - Nobuhisa's diary

    コンビネータとは自由変数を含まないλ項のことをいいますが、Yコンビネータ以外あまり取り上げられていない気がするのですが、これも100年に1度の金融危機の影響かとか、WBC楽しみですねだとか、そういえば今年雪祭り行けなかったんですよとか、最近携帯変えましたとか色々あるのですが、自分の練習もかねて、そんなコンビネータ達と戯れたいと思います。 沢山ある! Y以外にも広く知られている(?)コンビネータはいっぱいあるようですが、その中からいくつか。 I ≡ λx.x K ≡ (λx.(λy.x)) //以下、簡単に λx y.x と書きます F ≡ λx y.y M ≡ λx.xx S ≡ λx y z.xz(yz) B ≡ λx y z.x(yz) C ≡ λx y z.xzy L ≡ λx y.x(yy) Y ≡ (λx.xx)(λx.xx) (SLL) (当てるアルファベットが違うのはたまに見

    combinator - Nobuhisa's diary
    Nobuhisa
    Nobuhisa 2009/02/16
    頑張ってOcamlのYを理解しなくては・・・!
  • Y Combinator - LoveRubyNet

    $Id: ycombinator.html,v 1.6 2002/06/27 23:37:39 aamine Exp $ [ruby-list:35058] に刺激を受けて Y combinator を解読してみた。 こんなもん読むくらいなら以下の参考ページを読んだほうがいい。 参考にした (というかほとんどそのままな) ページ (英語) http://www.ececs.uc.edu/~franco/C511/html/Scheme/ycomb.html 動機 再帰関数は再帰するときに自分自身を名前で呼ぶのが普通である。 これをなんとかして名前を使わず、関数そのものを呼ぶように させたい。 求めかた まず単純な fact (階乗) を以下に示す。言語は Scheme である。 (define fact (lambda (n) (if (zero? n) 1 (* n (fact (- n

  • 1