2と3のリビジョン間の差分
2011-02-07 01:24:20時点のリビジョン2
サイズ: 66
編集者: Naoaki Iwakiri
コメント:
2011-02-07 01:35:17時点のリビジョン3
サイズ: 1234
編集者: Naoaki Iwakiri
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 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))))


Category読み物

Naoaki Iwakiri/Scheme課題memo (最終更新日時 2011-02-07 03:37:25 更新者 Naoaki Iwakiri)