SICP 読み (137) 4.1.1 評価器の中核

相当スルーして 4 章に突入。スデに 4.1.2 も読み進めつつあるんですが、体調不良なソレと kernel なナニとで進捗悪い。
いつもの通り、実装を小出しにされつつ、な進み方なんですが机上ベースで考えるのに慣れつつもあります。昔のヒトなので_机上_で、というのが体に染みついていたりしてまして、こーゆー問題はなんとなく嬉しい。

問題 4.1

list-of-values の例示されている実装が以下。

(define (list-of-values exps env)
  (if (no-operands? exps)
      '()
      (cons (eval (first-operand exps) env)
	    (list-of-values (rest-operands exps) env))))

_List の評価の順と無関係に_な解として思い付いたのは let なんですが、それが解の一つとして以下が問題の解でしょうか。

左から右
(define (list-of-values exps env)
  (if (no-operands? exps)
      '()
      (let ((left (eval (first-operand exps) env)))
	(cons left 
	      (list-of-values (rest-operands exps) env)))))
右から左
(define (list-of-values exps env)
  (if (no-operands? exps)
      '()
      (let ((right (list-of-values (rest-operands exps) env)))
	(cons (eval (first-operand exps) env) 
	      right))))

別解を思いつけないあたりが弱いんですが ...
# 違ってたらもっと微妙。

今からコンパイル着手です。