Lazy K

Lazy K on C++ Template

struct K { template<typename T> struct apply { struct type { template<typename U> struct apply { typedef T type; }; }; }; }; struct S { template<typename T> struct apply { struct type { template<typename U> struct apply { struct type { template<typename V> struct apply { typedef typename T::templat</typename></typename></typename></typename></typename>…

再帰してみる

以前から何度か自分でもラムダのみで再帰(Yコンビネータ)を導きだしてみようと挑戦していたのだが、結局作れずじまいだった。しかしLazy Kで書いてみると意外にも書けてしまった。 まずはこれ。 sii(sii)これはいくらやってもsii(sii)になる。まぁこれだけ…

さらに頑張ってみる

チャーチ数3を考える。その前に、 X`YZ s`kXYZとなる。なぜか? X`YZ kXZ`YZ s`kXYZこれで内側の関数の引数を外に出すことができる。 というわけでチャーチ数3。 X`X`XY X(kXY`XY) X(s`kXXY) X(s`kXXY) X(ksX`kXXY) X(s`kskXXY) X(s`kskX`iXY) X(s(s`ksk)iXY…

頑張って短くする

昨日の。もうちょっとなんとかやってみる。 FXY X`XYとりあえずXを増やさないといけないのでFをsABとしてみる sABXY AX`BXYBXにYを引数として渡したいので、Aをsとしてみる sX`BXY XY(BXY)BXYがXYになればいいので、Bはiでいい ssiXY sX`iXY XY(iXY)はじめの…

かんやくしてみる

ここ見ながらとりあえずチャーチ数で2を表現してみる。 ^f^x`$f`$f$x ^f``s`k$f``s`k$fi ``s``s`ks``s`kki``s``s`ks``s`kki`kiなんかできた。そこでこれをちょっと書き直して、 s(s`ks(s`kki))(s(s`ks(s`kki))`ki)とかした上で引数FとXを付けて本当にチャー…

あとで読む

http://hw001.gate01.com/eggplant/tcf/unlambda/ 本当はLazy Kをやってみたいのだが、そういえば上のところにUnlambdaにおける関数の考えかたが書いてあったことを思い出した。しかし今から飲みにいく。 追記: 飲みには行ってない。 というわけで上の「関…

SKIコンビネータを使ってチャーチ数の2を表せない程度の能力の私がLazy Kを紹介して周りの人間にも嗜んでもらいたいエントリー

チャーチ数そのものが何たるかは分かった気がするが、それをSとKで表せない。私にもっとコンビネータを! とか垂れ流すだけでは何だかさびしくなってきたので、ここを読んでる私の知り合いもしくは自分の理解の確認にも発信してみる。Unlambdaはパッと見でウ…