我发现字符串替换功能的Racket文档与球拍读取 - 评估 - 打印循环的实际工作方式截然不同。 docs表示您可以在String-replace之后放置一个关键字来指定您只想替换第一个实例,就像这样(但是他们没有这样的示例):
(string-replace "My Dog is a Dog" "Dog" "Cat" #:all #f)
所以,根据文档,这应该输出:“我的猫是狗”(我知道它没有意义,但这只是一个例子)。
相反,我的不同球拍安装以不同的方式抱怨,例如“程序不期望使用给定关键字的参数”或者使用关键字作为过程。
我想我仍然可以用string->列表做我想做的事,但我的抱怨是这违反了机器人第二定律!如果某些东西是有效的命令(直接来自文档),那就去做吧,然后停止抱怨!
编辑:如果我将#:all更改为#:all ?,那么它会抱怨参数的数量应为3,并带有可选关键字,但是会给出5个(换句话说,它会看到#:all?# f作为两个单独的参数,而不是关键字组。)
EDIT2:顺便说一下,我在Linux上使用drracket。如果我只在终端上使用“racket”命令,则更正的语法可以正常工作。
答案 0 :(得分:2)
是的,这是一个错误 - 关键字名称应该是#:all?
,而不是#:all
:
-> (string-replace "My Dog is a Dog" "Dog" "Cat" #:all? #f)
"My Cat is a Dog"
源中现在是fixed。