我是计划的新手。这是麻省理工学院 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/

    10-13 07:36