Liitle Schemer第4页103值功能

时间:2016-04-13 13:12:58

标签: scheme

我在不同的平台上遇到了一些问题。 这是我的代码:

(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

关于mit-scheme:

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

为什么呢?这让我很困惑。

1 个答案:

答案 0 :(得分:0)

Scheme不是一种独特的语言,不同的实现实现了不同的版本。因此,并非所有版本都具有相同的预定义运算符集。例如,atom?是此运算符之一。在未定义此运算符的实现中,如在MIT-Scheme中,您可以使用此定义:

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