如何在REPL中设置语言为htdp/bsl

7

我有以下 htdp/bsl 程序,保存为 example.rkt

#lang htdp/bsl
(+ 1 1)

当使用racket example.rkt运行上述代码时,输出结果如预期的那样(即2)。
但是,当我尝试以htdp/bsl作为语言启动REPL(racket -I htdp/bsl),会出现以下错误:
Welcome to Racket v6.3.
 default-load-handler: cannot open module file
  module path: (lib "htdp/bsl")
  path: /usr/share/racket/pkgs/htdp-lib/htdp/bsl.rkt
  system error: No such file or directory; errno=2
  context...:

例如,当选择的语言为typed/racket时,不会出现此错误。

为什么在使用htdp/bsl时会出现这个错误?如何正确地使用htdp/bsl作为语言启动REPL?


1
简短的回答是,htdp/bsl 和教学语言一般都不是为那种方式设计的。它们是为在 DrRacket 中使用而设计的。 - soegaard
@soegaard 是否适合在纯文本编辑器中编写BSL程序并使用#lang htdp/bsl?还是BSL只设计用于在DrRacket中使用? - Flux
取决于您想编写的程序类型。在DrRacket中,错误报告要好得多。我的建议是在学习Racket时使用DrRacket,然后过一段时间再切换到您喜欢的编辑器。 - soegaard
2个回答

6
正如@soegaard所说,htdp语言在DrRacket中表现最佳,我强烈推荐在这种情况下使用它。然而,如果你真的想要一个在DrRacket之外的REPL(比如说你正在评分作业并且想为它编写一个shell脚本),那么你实际上可以使用,enter来获取一个BSL repl。假设你有一个名为homework1.rkt的BSL文件,其中包含以下内容:
#lang htdp/bsl
"I'm a rebel"

那么你可以在文件目录中打开Racket并进入模块。在这种情况下,你会得到类似以下的内容:

$ racket
> ,enter "homework1.bsl"
"I'm a rebel"
homework1.bsl>

从这里开始,您将进入一个与DrRacket中非常相似的BSL repl。


4

使用

racket -I htpd/bsl/lang example.rkt

开始你的程序(在Racket 6.3.0.1版本中测试通过)。

同时,请考虑升级到当前版本的Racket(版本为6.10)。


1
有趣的是,当我尝试使用“racket -I htdp/bsl/reader”命令时,它告诉我找不到“(submod (lib“htdp/bsl/reader”) configure-runtime)”这个子模块,但是该子模块显然存在(并且可以被要求…)。 - Leif Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接