6

我对这个例子有疑问

(define (+ x y)
  (if (= x 0)
      y
      (+ (-1+ x) (1+ y))))

-1+ 和 1+ 有什么问题,当我评估它时,我得到了这个结果

  • DrScheme:-1+:此函数未定义
  • 球拍:对未定义标识符的引用:-1+

但我写了这个,它可以工作

(define (add x y)
  (if (= x 0)
      y
      (+ (- x 1) (+ y 1))))
4

2 回答 2

12

对于球拍:

  • 使用add1代替1+
  • 使用sub1代替-1+1-

问题是,这些名称都不是标准名称,因此您无法在所有 Scheme 实现中可靠地使用它们。:-)

于 2011-10-08T05:35:27.663 回答
2

您可以通过向 DrRacket 添加 SICP 支持来解决此问题。

http://www.neilvandyke.org/racket-sicp/

再有麻烦告诉我。

于 2012-02-21T02:39:44.717 回答