我在不同的平台上遇到了一些问题。 这是我的代码:
(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
为什么呢?这让我很困惑。
答案 0 :(得分:0)
Scheme不是一种独特的语言,不同的实现实现了不同的版本。因此,并非所有版本都具有相同的预定义运算符集。例如,atom?
是此运算符之一。在未定义此运算符的实现中,如在MIT-Scheme中,您可以使用此定义:
(define (atom? x)
(and (not (pair? x)) (not (null? x)))))