SICP 読み (229) 4.3.3 amb 評価器の実装
直前エントリは日本語微妙。という事でコードで語ってやれ、と思い試験を書いてみたんですが微妙なソレしかひり出てこない。(list (amb 1 2 3) (amb 4 5 6)) な手続きにおけるリストの二番目の要素の失敗継続は最初の要素の try-next なんですよ、って試験をどうやって書けば良いのか、ってか書けないのかなぁ。
現時点で作成できてるのは以下の試験。
("Procedure applications" ("(list (amb 1 2 3))" (let ((env (setup-environment)) (i 1) (test-proc (lambda (next) (next)))) (let ((succeed-proc (lambda (val next) (assert-equal (list i) val) (set! i (+ i 1)) (test-proc next)))) (ambeval '(list (amb 1 2 3)) env succeed-proc (lambda () 'failed)) ) ) ) ("(list (amb 1 2 3) (amb 4 5 6))" (let ((env (setup-environment)) (i 1) (j 4)) (let ((test-proc (lambda (next) (next))) (set-i-j (lambda () (set! j (+ j 1)) (if (> j 6) (begin (set! i (+ i 1)) (set! j 4)))))) (let ((succeed-proc (lambda (val next) (assert-equal (list i j) val) (set-i-j) (test-proc next)))) (ambeval '(list (amb 1 2 3) (amb 4 5 6)) env succeed-proc (lambda () 'failed)) ) ) ) ) )
なんつーか微妙。