2011-10-25 6 views
1

私の本からスキームプログラムを実行しようとしていますが、評価しようとすると(マイナス5 4)。エラー: "未定義の識別子への参照:マイナス"が表示されます。関数を(マイナス5 4)として実行することは明らかに機能しません。私は評価が間違っていると言いましたか?スキームの定義されていない識別子への参照

(define (eval-expr E) 
    (cond 
    ((number? E) E) 
    ((eqv? (car E) 'plus) (apply + (eval-params (cdr E)))) 
    ((eqv? (car E) 'times) (apply * (eval-params (cdr E)))) 
    ((eqv? (car E) 'minus) (apply - (eval-params (cdr E))))  
    ((eqv? (car E) 'divide) (apply/(eval-params (cdr E)))) 
    (else '()) ; confused - return() 
    ) 
) 

(define (eval-params E) 
    (if (null? E) '() 
     (cons (eval-expr (car E)) (eval-params (cdr E))) 
    ) 
) 

答えて

5

あなたはeval-expr関数は算術式を表しデータを取る

(eval-expr '(minus 5 4)) 

を呼びたいように見えます。一方、あなたの例の(minus 5 4)minusという関数を呼び出そうとしているコードです。

+0

私はそれを持っているように見えます。 (eval-expr '(マイナス5 4))ありがとう! – user1011861

+1

答えを覚えておいてください。 – soegaard