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 が扱えないのが原因みたいに見えるんですが、なんか納得できん。なんかハマリ杉な今日この頃でボーナスステージはいつやってくるんだろうか。(とほほほほ