ようこそ。睡眠不足なプログラマのチラ裏です。

ちょっと草植えときますね型言語で近況報告しますwWWwwwwパート2

お疲れさまです(本当の意味で)。

以前、「ちょっと草植えときますね型言語で近況報告しますwWWwwww」という記事を書きました。


で、最近の私もやっぱりこんな感じです。

            _, ._
          ( ・ω・) んも〜
          ○={=}〇,
           |:::::::::\, ', ´
        、、、、し 、、、(((.@)
          wvwwWWwWWWwvWwwwwWWwWWWwWW
          WWwWWWWWwWWWWWWwWWWWWWWwW
          wwwwwwwwwwwwWWWwWWWWWwWWWW
          WWWwWWWWWWWWWwWWWWWWWWWWW
          WwWWWWWWWWWWWWWWWWWwWWWWW
          WWWWWWWwWWWWWWWWWWWWWWWWW
          wwwwwwwwwwwwwwwwwwWwwwwwWWwwww
          WWWwwww

以前よりもコードが短くなりましたね。
というか、単に前のコードに”無駄”があったのでそれを無くしただけです。


で、もっと短く書けないものかと思いまして、
草でチャーチ数のPRED関数を実装したら、ひょっとして短くできるんじゃなかろうかとか
しょうもないことを思いついちゃったので、息抜きを兼ねてちょっくらチャレンジしてみたわけです。


草なPRED関数を使ってみたバージョン

            _, ._
          ( ・ω・) んも〜
          ○={=}〇,
           |:::::::::\, ', ´
        、、、、し 、、、(((.@)
          wvwwwWWwwwWWwvwwWWWWwwvwwww
          wwWWWWWwwWWWWWwwWWWWWwwW
          wwWwwwwwwwwwwvwwWWwWWWwvwwW
          WwWWWwWWWWwWWWWWwvwwWwwvW
          WWWwwwwwwwWwwwwwwwWwwwwwwwW
          WWWwwwwwWwwwwwwWWWwwwwwwwWW
          WWWWWwwwwwwwwwWwwWwwwwwwWww
          wwwWWWWWWWWWWWWWWWWWwwwww
          wwwwwwwwwwwwwwWWwWwwwwwwwwww
          wwwwwwwwwwwwWWWWWWWWwwwWwwW
          WWWWWWWwwwwwWwwWWWWWWWWWW
          WWWWWWWWWWWWWWwwwwwwwwwwww
          wwwwwwwwwwwwwWwwwwwwWWwwwwwWW
          Wwwww

えっと・・・短くってゆーか、むしろ倍増? 比較するまでもなく明らかに長くなっていますね(爆
もうちょっと頑張れば、まだ短くできる余地はあるにはあるのですが、
そもそもPRED関数の定義が思いのほか長くなってしまったので、このアプローチでは駄目だな、と。


上記のコードでは、なにをやっているかさっぱりわからないと思うので、
コメントで簡単な解説をつけてみました。


草なPRED関数を使ってみたバージョン解説

wv :id
wwwWWwwwWWwv :λf.λg.λh.h(g f) = F*B
wwWWWWwwv :λx.λy.x = TRUE
wwwwwwWWWWWwwWWWWWwwWWWWWwwWwwWwwwwwwwwwwv  :λa.λb.λc.λd.λe.λf.d(b e)(c f)a = sp
wwWWwWWWwv :λf.λx.f (f x) cn2
wwWWwWWWwWWWWwWWWWWwv :λf.λx.f(f(f (f x))) cn4
wwWwwv :λm.λn. n m = POdu
WWWWwwwwwww :sp id
Wwwwwwww   :sp id F*B
Wwwwwwww   :sp id F*B TRUE = PRED
WWWWwwwww : POdu cn4
Wwwwwww : Podu cn4 cn4 = cn256
WWWwwwwwww : PRED cn4 = cn3
WWWWWWWwwwwwwwww : POdu cn2
Www : POdu cn2 cn3 = cn8
Wwwwwww : cn8 PRED
Wwwwww :(cn8 PRED) cn256 = cn248
WWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwww : id Succ
WWw :cn248 Succ = +248
Wwwwwwwwwwwwwwwwwwwwwww : +248 du =  o
WWWWWWWWwww :cn3 Succ = +3
Www : o + 3 = r
WWWWWWWWwwwww :cn8 Succ = +8
Www : r + 8 = z
WWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwww : id Out
Wwwwwww :Out o
WWwwwww :Out r
WWWwwww :Out z


#C#やF#、Code Contractsなどの記事は時間と心に余裕ができたら書きたいと思います。
#いやしかし、ラムダ計算って本当に面白いですね。あはははは。