タグ

functionalに関するtaigouのブックマーク (5)

  • Rubyのある風景 - Y+Combinator+2

    以前取り上げたY Combinatorですが、何故"Y"なのかと思って調べてみたところ、どうやら"To Mock a Mockkingbird" がもとになっているようです。 このでは色々な鳥の名前を各ラムダ式に割り当てて、組み合わせ理論(Combinatory Logic)を解説しています。 ちなみにYは"Why Bird (aka Sage Bird)"だそうで。 さて、組み合わせ理論の有名な話として、 K = λxy.x S = λxyz.xz(yz) の二つを用いることで、チューリングマシンと等価な計算能力が得られるということが知られています(ということは、この二つさえあれば、今一般に使われているプログラムは全て記述できるわけですね)。 例えば、恒等写像I(λx.x)は SKK = (λxyz.xz(yz))(λxy.x)(λxy.x) = (λyz.(λxy.x)z(yz))(

  • Rubyのある風景 - Y Combinator

    再帰的な関数を作るときに関数に名前をつけずに定義するにはどうしたらいいのかというのが、Y Combinatorの中心的な話題です。 まずは、再帰の定番、階乗を計算する関数に登場願いましょう。 fact = lambda{|n| if n < 2 1 else n * fact[n - 1] end } puts fact[10] ここからfactという名前を取り除こうというわけですね。 最終目標は、以下のようにして階乗を計算する関数を定義することができるようになることです。 fact = y[lambda{|h| lambda{|n| if n < 2 1 else n * h[n - 1] end } ] ) puts fact[10] ここで出てきたyが、Y Combinatorと呼ばれるものです。 見やすさの為に、factという名前をつけましたが、関数を定義するところではfact

  • Y コンビネータって何? - IT戦記

    このエントリの 親友へ。ブログを書こう。 - IT戦記 y がブログを始めたみたいなので、読んでみた。 で、最新のエントリを読んでみたら、 Y コンビネータというものについて書いてあったので、 Y Combinatorが凄すぎる! - yuji1982の日記 Y コンビネータって何ってところから、自分でもいろいろ考えてみた。 結局なんなのかさっぱり分からなかったんですが、自分が考えたことをまとめておく まず、フィボナッチ数を求める fib を定義する var fib = function(n){ return (n <= 2) ? 1 : (arguments.callee(n-1) + arguments.callee(n-2)); }; fib(10); おお! JS すげー!名前は n しか使ってねーよ! めでたし、めでたし。。。。じゃなくて! JS が素晴らし過ぎて話が終わってしま

    Y コンビネータって何? - IT戦記
  • 404 Blog Not Found:TuringとChurchの狭間で

    2006年04月16日13:53 カテゴリMath書評/画評/品評 TuringとChurchの狭間で The Emperor's New Mind Roger Penrose [邦訳:皇帝の新しい心] なんでひげぽんが反復がすぐにわからなかったかを憶測すると、「変数とは代入すべきもの」、という手続き型言語の呪縛が思い立つ。ひげぽんは別にがっかりする必要はない。hyukiさんさえそれに引っかかっていたんだから。 その証拠を、以下にお見せする。 [結]2005年8月 - www.textfile.org sub fix { my $G = shift; return $G->( sub { my $x = shift; return fix($G)->($x); } ); } これはPerlで実装した不動点関数で、全く問題なく動く。しかし、hyukiさんも知らぬ間に一つ「反則」を犯しているこ

    404 Blog Not Found:TuringとChurchの狭間で
  • 数理科学的バグ撲滅方法論のすすめ---目次 | 日経 xTECH(クロステック)

    筆者 住井 英二郎 「プログラミング言語理論」という研究分野がある。この分野の研究者たちは,「ML」「Haskell」「Scheme」あるいは「λ計算」「π計算」(円周率計算のことではない)など,多くのプログラマにとっては聞いたこともない言語やモデルについて,日夜研究している。ただ,そのような言語は「難しい」「役に立たない」などと思われがちだ。 この連載では,こうしたプログラミング言語やソフトウエア科学の様々な研究を,できるだけ普通のプログラマやエンジニアにもわかりやすく(どちらかといえば理論よりも実用に重点をおいて)紹介していく。 更新は毎月第2水曜日(1月のみ第3水曜日)

    数理科学的バグ撲滅方法論のすすめ---目次 | 日経 xTECH(クロステック)
  • 1