SICP問題4.10
データ抽象を使うと評価される言語の特定の構文と独立なeval手続きを書くことが出来る。これを示すため、evalとapplyを変えずに本節の手続きを修正し、schemeの新しい構文を設計し、実装せよ。という問題。
ためしに新しい構文として前置記法でなく後置記法にした場合を考える。
全部やるのは大変なのでちょっとだけ。
まず tagged-list? を変更して
(define (tagged-list? exp tag) (define (tag-exp x) (if (pair? x) (if (null? (cdr x)) (car x) (tag-exp (cdr x))) x)) (if (pair? exp) (eq? (tag-exp exp) tag) #f))
次に
(define (operator exp) (define (iter x) (if (pair? x) (if (null? (cdr x)) (car x) (iter (cdr x))) x)) (iter exp)) (define (operands exp) (define (iter x result) (if (pair? x) (if (null? (cdr x)) result (iter (cdr x) (cons (car x) result))) result)) (iter exp '()))
とか考えたんだけど、すごく大変そうなので、パス。
ググってみてもやってる人少なそうだなぁ〜。