サイズ: 66
コメント:
|
サイズ: 1234
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 2: | 行 2: |
とりあえず課題ページの例が動くところまで、ほとんど課題ページの内容をコピペです。ちょこちょこ改訂されてるので一度コピペしなおしてみると便利かも。 自分で書く部分は、 *make-top-env内のdefine-var!の羅列の中で<,>等を追加 *base-apply内で*lambda*を見つけた場合の処理 *def-eval *if-eval *quote-eval の五つくらいです。 よって根幹部分はこんな風になります。beginも簡単だけど、例では使ってないので省略。 {{{#!scheme (cond ((eof-object? exp) '*exit*) ((boolean? exp) exp) ((number? exp) exp) ((string? exp) exp) ((symbol? exp) (var-eval exp env)) ((null? exp) exp) ((not (list? exp)) (eval-error 'syntax-error exp)) ((equal? (car exp) 'exit) '*exit*) ;; ((equal? (car exp) 'begin ((equal? (car exp) 'lambda) (lambda-eval exp env)) ((equal? (car exp) 'let) (let-eval exp env)) ((equal? (car exp) 'define) (def-eval exp env)) ;; ((equal? (car exp) 'letrec) ((equal? (car exp) 'if) (if-eval exp env)) ((equal? (car exp) 'quote) (quote-eval exp env)) (#t (app-eval exp env)))) }}} |
Naoaki Iwakiri/Scheme課題memo
とりあえず課題ページの例が動くところまで、ほとんど課題ページの内容をコピペです。ちょこちょこ改訂されてるので一度コピペしなおしてみると便利かも。 自分で書く部分は、
make-top-env内のdefine-var!の羅列の中で<,>等を追加
- base-apply内で*lambda*を見つけた場合の処理
- def-eval
- if-eval
- quote-eval
の五つくらいです。 よって根幹部分はこんな風になります。beginも簡単だけど、例では使ってないので省略。
(cond ((eof-object? exp) '*exit*) ((boolean? exp) exp) ((number? exp) exp) ((string? exp) exp) ((symbol? exp) (var-eval exp env)) ((null? exp) exp) ((not (list? exp)) (eval-error 'syntax-error exp)) ((equal? (car exp) 'exit) '*exit*) ;; ((equal? (car exp) 'begin ((equal? (car exp) 'lambda) (lambda-eval exp env)) ((equal? (car exp) 'let) (let-eval exp env)) ((equal? (car exp) 'define) (def-eval exp env)) ;; ((equal? (car exp) 'letrec) ((equal? (car exp) 'if) (if-eval exp env)) ((equal? (car exp) 'quote) (quote-eval exp env)) (#t (app-eval exp env))))