2016-04-13 7 views
0

私は別のプラットフォームでいくつかの問題があります。 これは私のコードです:MIT-スキームにLiitle Schemer第4ページ:103値関数

(value '(1 o+ 1)) => 2 

(value '(1 o+ 1)) => ;Unspecified return value 

なぜ鶏方式に

(define o+ 
    (lambda (n m) 
    (cond 
    ((zero? n) m) 
    (else (o+ (sub1 n) (add1 m)))))) 

(define value 
    (lambda (nexp) 
    (cond 
    ((atom? nexp) nexp) 
    ((eq? (car (cdr nexp)) 'o+) 
     (o+ (value (car nexp)) 
      (value (car (cdr (cdr nexp)))))) 
    ((eq? (car (cdr nexp)) 'o-) 
     (o- (value (car nexp)) 
      (value (car (cdr (cdr nexp)))))) 
    ((eq? (car (cdr nexp)) 'o*) 
     (o* (value (car nexp)) 
      (value (car (cdr (cdr nexp)))))) 
    ((eq? (car (cdr nexp)) 'o/) 
     (o/ (value (car nexp)) 
      (value (car (cdr (cdr nexp))))))))) 

?それは私を混乱させます。

+0

atom?非標準です。原子の定義は何ですか? MITでは? – user448810

答えて

0

Schemeは一意の言語ではなく、さまざまな実装が異なるバージョンを実装しています。このため、すべてのバージョンが同じ定義済み演算子のセットを持つわけではありません。たとえば、atom?はこの演算子の1つです。 MIT-Schemeのように、この演算子が定義されていない実装では、次の定義を使用できます。

(define (atom? x) 
    (and (not (pair? x)) (not (null? x))))) 
+0

ありがとう、私はそれを得た!わたしは、あなたを愛しています ! – programer5566

関連する問題