タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

lambdaに関するeagletmtのブックマーク (3)

  • チャーチ数の加減乗除 - MEMO:はてな支店

    型推論を無効にする方法を発見。 型推論をごまかす Y コンビネータ L の定義は、当は L x y = x (y y) です。(y y)の部分が自己言及になって、GHC ではこの部分の型をうまく処理できません。そこで、unsafeCoerce で型推論をごまかしています。 http://d.hatena.ne.jp/kazu-yamamoto/20100519/1274240859 おかげで、断念していたHaskell版のチャーチ数の引き算とYコンビネータを使った割り算(と剰余)が作れた。 これで加減乗除の基演算がそろった。感謝。 import Unsafe.Coerce m x = x (unsafeCoerce x) y f = m (\x -> f (m x)) true x y = x false x y = y not' p = p false true and' p q =

    チャーチ数の加減乗除 - MEMO:はてな支店
  • Peter Selinger: Papers

  • おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな

    やっと、Yコンビネータが何を意味するものなのか、どういう意義があるのかがわかりました。 名前を使わず再帰ができますよ!というだけのものじゃなかったのですね。 まずλありき 関数の話をしたいのです。 そのとき、いちいち hoge(x) = x * 2 としてhogeを・・・、とか名前をつけて話を進めるのがめんどうなので、関数を値としてあらわすと便利ということで、λという値を定義するのです。 そうすると、上のhoge関数なんかはλ(x)(x*2)などとあらわせますが、引数をあらわすのに()を使うといろいろまぎらわしいので、 λx.x*2 のように表記します。 というのがλ。 このとき、λになにかわたされたら、引数としてあらわされる部分を単純におきかえます。 (λx.x*2)y とあったら、xの部分をyでおきかえて (λx.x*2)y → y * 2 となります。λの引数部分を与えられた引数で置

    おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな
    eagletmt
    eagletmt 2009/04/10
    うぅむ…
  • 1