1
4
我无法再现你的问题。具体来说,我在DrRacket中运行此程序:
然后,在交互窗口中,我运行
... 并得到结果:
你能提供更多的信息来帮助重现你的问题吗?(您提到的mcons清楚地表明,您正在使用racket和命令行运行此代码,但我猜您加载和运行代码的方式有点可笑。) 编辑:好的,我现在可以复制类似的内容,只需将这些表达式一个接一个地粘贴到REPL中。显然,我已经很久没有使用顶级REPL了。不管你的问题的答案是什么,更高层次的答案是:不要将表达式粘贴到REPL中。用MatthewFlatt(Racket的主要实现者)的话来说,“顶级是没有希望的。”使用DrRacket是解决此问题的最简单方法。 编辑2:正如我所怀疑的,TL;博士:1)顶层是没有希望的。2) 将所有代码放在模块中。 我在Racket用户列表的帖子中总结了一些这种混淆。具体而言,根本问题是:绑定的右侧如何不在绑定本身的范围内? 以下是马修回答的摘录: 这就是问题的本质所在。哪些内容属于 顶级定义?
例如,是对
? 进来怎么样
? 或在中
或
?
球拍的规则是
参考
还有其他选择,但我认为没有 最终变得更好或更一致。顶层为 绝望的 模块的表现明显更好,部分原因是 定义很明确:从模块开始到结束。 在这一点上,你可能会问自己 是 应该与球拍互动。有几个不错的选择: 1) 使用DrRacket。我对这个建议太高了。 2) 使用命令行,并使用“require”而不是“load”。“load”并不是说得太细,它是对该语言旧版本的半破坏性保留。 例如,我可以将此代码放在一个名为“a.rkt”的文件中:
然后,我启动racket并“要求”此模块,然后使用“回车”进入模块:
让我再次重申,您通过简单地使用DrRacket来回避所有这些问题。 所以我今天学到了很多!谢谢 |
2
1
最好的解决方案是使用与标准函数不冲突的其他名称。 |
user16655 · 方案中的Map+lambda表达式 9 年前 |