我是计划的新手。这是麻省理工学院 SICP 类(class)的代码示例。
(define (+ x y)
(if (= x 0)
y
(+ (-1+ x) (1+ y))))
如何将其转换为 Racket 代码?我想转换为 Racket,因为我使用 DrRacket 来运行代码,我喜欢这样。它一直工作到现在,但提示计划的增量运营商。
我得到的错误是:
define-values: cannot change constant variable: +
reference to undefined identifier: -1+
最佳答案
这将在 Racket 中正常工作:
(define (add x y)
(if (= x 0)
y
(add (sub1 x) (add1 y))))
一些评论:
+
会很麻烦,因为它会与 Scheme 中的原始 add 操作发生冲突;如果您使用不同的名称,则更简单,例如 add
(这将修复第一个错误) -1+
不是 Racket 中的程序,用 sub1
替换它(这将修复第二个错误)。或者,您可以为此过程定义别名,如下所示:(define -1+ sub1)
1+
不是 Racket 中的一个程序,用 add1
替换它。或者,您可以为此过程定义别名,如下所示:(define 1+ add1)
(= x 0)
(zero? x)
关于scheme - 我如何将此 Scheme 代码转换为 Racket,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11056493/