SICPゼミ第51回
ご無沙汰しております
練習問題4.23
- Alyssaの解析器
(define (analyze-sequence exps) (define (execute-sequence procs env) (cond (( null? (cdr procs )) ((car procs) env)) (else ((car procs) env) (execute-sequence (cdr procs) env )))) (let (( procs (map analyze exps ))) (if (null? procs) (error "Empty sequence: ANALYZE")) (lambda (env) (execute-sequence procs env ))))
- 本文中の解析器
(define (analyze-sequence exps) (define (sequentially proc1 proc2) (lambda (env) (proc1 env) (proc2 env ))) (define (loop first-proc rest-procs) (if (null? rest-procs) first-proc (loop (sequentially first-proc (car rest-procs )) (cdr rest-procs )))) (let (( procs (map analyze exps ))) (if (null? procs) (error "Empty sequence: ANALYZE")) (loop (car procs) (cdr procs ))))
Alyssaの解析器では字句解析を(map analyze exps)
で行っていて、構文解析をexpecute-sequence
で行っているが、analyze-sequence
で返ってくるのはlambda式なので、lambdaが実行されるまで構文解析が行われない。
それに対して本文中の解析器はanalyze-sequence
の段階で構文解析まで行っている。
練習問題4.24
お気持ち