SICP 読み (198) 4.2.2 遅延評価の解釈系
いくつか。ちなみに自宅でも allcode なソレをオトして使っています。何が原因だったのか、については究明が必要ではないかと。でも、あまりにも微妙な原因だったら嫌だなぁ。
問題 4.32
よく見りゃ意味は分かるな。遅延度という切り口で言えば、car なソレが、という言い分はよく理解できる。スルーした部分がどうなのか、という話はありますが、3.5 節は再度確認した方が良いかな、と思いつつあります。とは言え、amb もナニ。
問題 4.33
直前エントリにて、(1 2 (3 4) 5) みたいなリストの考慮が云々という事を書いてますが、微妙だなぁ。こんなカンジにすれば良いのだろうか。
(define (make-cons exp) (cond ((null? (cdr exp)) (list 'cons (car exp) (cdr exp))) ((pair? (car exp)) (list 'cons (make-cons (car exp)) (make-cons (cdr exp)))) (else (list 'cons (car exp) (make-cons (cdr exp))))))
この方が見易いかなぁ。
(define (make-cons exp) (cond ((null? (cdr exp)) (list 'cons (car exp) (cdr exp))) (else (list 'cons (let ((tmp (car exp))) (if (pair? tmp) (make-cons tmp) tmp)) (cdr exp)))))
うーん。逆にさらに駄目になっちゃてる感も。(何
しかも試験するリキはスデに残ってないかも。
問題 4.34
キツい。特に_無限リストに対してどうするか_というソレが一番ハードル高い。気持ち的には amb 楽しみなんですが、スルー癖が付くと際限なくなる、という事で進めてて 3.5 スルーのおかげでイタい目にあってるだけに、きちんとヤラないと駄目か。
問題 4.33 (再度)
直前エントリは微妙な模様。さすがに
(assert-equal 1 (car (quote (1 2 3)))) (assert-equal 2 (car (cdr (quote (1 2 3))))) (assert-equal 3 (car (cdr (cdr (quote (1 2 3)))))) (assert-equal '() (cdr (cdr (cdr (quote (1 2 3))))))
これはボケ杉ではないか、と。
つづき
上記のボケを修正したら試験にパスしなくなってます。とほほほ。
これって空リストを actual-value が扱えないのが原因みたいに見えるんですが、なんか納得できん。なんかハマリ杉な今日この頃でボーナスステージはいつやってくるんだろうか。(とほほほほ