2015-04-01から1ヶ月間の記事一覧

ものまね鳥をまねる

ざっと読み(解き)終えて思ったこと。超よい本でした。 スマリヤンはやはり手品師です。こんな解った気にさせてくれる本はめったないです。この本で直接書かれてる訳ではないけど、クイズのような問題で手を動かしていると以下のようなことが解ったような感じ…

チャーチ数

(define I (lambda (x) x)) (define K (lambda (x) (lambda (y) x))) (define S (lambda (x) (lambda (y) (lambda (z) ((x z) (y z)))))) (define C (lambda (x) (lambda (y) (lambda (z) ((x z) y))))) (define V (lambda (x) (lambda (y) (lambda (z) ((z …

ものまね鳥。算数鳥。

ものまね鳥の本において、算数が出来る鳥(コンビネータ)として以下のものが紹介されてる Vxyz = zxy // λxyz.zxy Ix = x // λx.x fxy = y // KI , λxy.y txy = x // K , λxy.x SUCC = Vf ZERO = I ONE = VfI TWO = Vf(VfI) THREE Vf(Vf(VfI))通常のチャーチ…

昨日のやつをもすこし修正した

相互再帰を導入した。 ((式1=>SとかKとか) (式2) ...) のような式に対応した。 (use srfi-11) (define (cutlist size car_l result_size l) (if (or (= size 0) (null? l)) (values (reverse car_l) l result_size) (cutlist (- size 1) (cons (car l) car_l…

修正した。

S (式1) (式2) が S (式1') (式2') (式3) になることはありえない気がする。気がするだけなのが弱い。結局、((式1) (式2) (式3)) みたいなの((式1)を簡約するとSになるようなやつ)には対応せず。つーか (else (map expand-combinator-one seq))を (else (exp…

ベータ簡約

ラムダ式をSKIコンビネータにバラすプログラムを書いてはみたものの、本当に正しく動いてんのか不安になって、(実際最初は間違ってたし。)逆を行なうプログラムを書いてみた。 (define (construct-S p1 p2 p3 rest) (if (not (pair? p1)) `(,p1 ,p3 ,(if (no…

ものまね鳥。論理鳥。

鳥(コンビネータ)を全て1引数の関数として実装して、schemeで動かそうとすると、どうしても余計に(主観だけど)括弧がついてしまう。 (define I (lambda (x) x)) (define K (lambda (x) (lambda (y) x))) (define T (lambda (x) (lambda (y) (y x)))) (define…

いろいろ間違ってた。

先日のschemeのプログラムは色々間違ってた。x消去で、xを含まない合成手続きXを K X と処理すべきが、 S (K Y) (K Z) になってた。コンビネータとしては冗長だけど、間違ってはいない。といいわけしておく。 ついでにutil.matchを使って書き直してみた。(中…

SKIコンビネータをばらすプログラムをgauche書いた。やっぱものまね鳥の本はすごいと思う。初心者でもこんなことが出来るようになるとは。てゆーかアルゴリズムがまんま書いてくれてあるだけだが。(toSK '(x y) '(x y y)) => (S S (K I)) (toSK '(x y) '(y x…