2016-04-13 31 views
0

我在不同的平臺上遇到了一些問題。 這是我的代碼:Liitle Schemer 4th page103 value function

(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))))))))) 

雞方案:

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

麻省理工學院的方案:

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

爲什麼?它讓我困惑。

+0

atom?是非標準的。原子的定義是什麼?在MIT? – user448810

回答

0

Scheme不是一種獨特的語言,不同的實現實現不同的版本。由於這個原因,並不是所有的版本都有相同的一組預定義的操作符。例如,atom?就是這個運營商之一。在沒有定義這個算子的實現中,就像在MIT-Scheme中一樣,你可以使用這個定義:

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

謝謝,我明白了!我愛你 ! – programer5566

相關問題