代码之家  ›  专栏  ›  技术社区  ›  afkbowflexin

Racket医生的SICP问题

  •  30
  • afkbowflexin  · 技术社区  · 14 年前

    (define + 5) sqrt 程序。相反,我得到的是:

    define-values: cannot change constant variable: +
    

    我的语言目前设置为R5RS,我的印象是它会处理与SICP的兼容性问题。

    3 回复  |  直到 7 年前
        1
  •  34
  •   DjebbZ    10 年前

    即使可能,在不真正了解系统将如何对此做出反应的情况下,也不应该进行这种重新定义。例如,如果你重新定义 + ,是否会有其他代码中断?在Racket的例子中,答案是“不”——但这是因为你不能真正重新定义 + :而是定义 + ,只有您的代码才能使用。

    至于语言的选择——Rackets R5RS模式是一种非常严格的模式,而且它不是您通常想要使用的。为了一个 更SICP友好的环境,见尼尔范戴克的 SICP Support page 这将为你提供一种专门为这本书设计的语言。(IIRC,它甚至有书中展示的图形语言。)

        2
  •  20
  •   jpswain    14 年前

    我在这里尝试使用RSA示例时遇到了问题(SICP的一部分内容):
    http://mitpress.mit.edu/sicp/psets/ps3/readme.html

    1) 通过将此添加到空白文件的顶部来运行初始下载:

    #lang planet neil/sicp

    然后打“跑”

    2) 享受DrRacket非常友好的自动下载和安装PLaneT Neil模块,只需去喝杯咖啡;-)

    4) 重新打开,然后从“选择语言”列表中选择“SICP PLaneT 1.15”。
    (除了执行初始下载之外,我无法在顶部添加声明来为我工作。)

    祝你好运!

        3
  •  11
  •   afkbowflexin    14 年前

    在“语言”面板中,您需要禁用“禁止重新定义初始绑定”。这可以解决此问题。