メモ
ループの原因が分からん。とりあえず動作をメモっておく。
;;; EC-Eval input: (define (cons x y) (lambda (m) (m x y))) (total-pushes = 3 maximum-depth = 3) ;;; EC-Eval value: ok ;;; EC-Eval input: (define l (cons 1 2)) (total-pushes = 13 maximum-depth = 8) ;;; EC-Eval value: ok ;;; EC-Eval input: l (total-pushes = 0 maximum-depth = 0) ;;; EC-Eval value: (compound-procedure (m) ((m x y)) <procedure-env>) ;;; EC-Eval input: (l *) (total-pushes = 21 maximum-depth = 6) ;;; EC-Eval value: 2 ;;; EC-Eval input: (l +) (total-pushes = 21 maximum-depth = 6) ;;; EC-Eval value: 3 ;;; EC-Eval input:
上記の l について
(l (lambda (p q) p))
したら循環参照っぽいカンジでリストの出力が止まらなくなります。上記の l は compound な手続きなので (lambda (p q) p) は thunk になるのか。
って、これちょっと頭の中だけじゃ駄目だな。それこそ紙とエンピツの世界が (ry