关于NetLogo中“run”和“word”的问题
下面的代码实现了预期的功能关于NetLogo中“run”和“word”的问题,netlogo,Netlogo,下面的代码实现了预期的功能 (run [ [b n init] -> (run (word "create-" b " " n " [" init " ]"))] "turtles" 3 "setxy 19 4") 它创造了三只海龟,并把它们放在(19,4)。我想在不引用初始化的情况下做一些更精简的事情。所以我试着: (run [ [b n init] -> (run (word "create-" b " " n " " init ))] "turtles" 3 (list se
(run [ [b n init] -> (run (word "create-" b " " n " [" init " ]"))] "turtles" 3 "setxy 19 4")
它创造了三只海龟,并把它们放在(19,4)。我想在不引用初始化的情况下做一些更精简的事情。所以我试着:
(run [ [b n init] -> (run (word "create-" b " " n " " init ))] "turtles" 3 (list setxy -6 -4))
但我收到了一条错误消息:列表右边应该有2个输入,或者用括号括起来时有任意数量的输入。
由于列表及其输入都用括号括起来,我想问题在于使用不带引号的“setxy”
结果是(令我惊讶的是)以下几点运行
由于(列出“setxy”-6-7)
产生了[“setxy”-6-7]
,我不明白为什么会发生这种情况
为了查看发生了什么,我运行了word(列出“setxy”-6-7)”
,得到了“[setxy-6-7]”
我应该如何理解word正在做什么?为什么它会在setxy
周围加上引号?因为word
生成一个字符串,所以任何嵌入的字符串本质上都是附加在适当的位置,而不是作为嵌入字符串处理?我希望一个带有嵌入字符串的字符串在嵌入字符串周围包含引号字符。如果嵌入的字符串本身有一个嵌入的字符串,这将变得不明确。但这将是一个用户问题
我该如何理解word在做什么
假设您有以下列表:
let xs ["a" "b" "c"]
在内部,这:
print (word xs)
与此等效:
print (word "[" (reduce [ [acc x] -> (word acc " " x) ] xs) "]")
换句话说,word
只在列表的每个元素上运行,并在两端添加括号和空格
(相关代码为和。)
为什么它会在setxy周围加引号
这导致了[abc]
而不是[“abc”]
这一事实是经过深思熟虑的决定,还是仅仅是该代码最初在90年代后期编写的方式带来的某种意外后果?一、 首先,我不能说。也许其他人会有更多的洞察力
但是,如果您想使用这种怪癖来构建字符串化的代码块,我会说,请继续。这种行为不太可能很快改变…在命令行中,输入
show(word[“setxy”-6-7])
。hthI同意该文件应明确说明,而非[“1”2 3]!=(runresult(word[“1”2 3])
。NetLogo原语的文档位于GitHub:。对潜在改进的拉动式请求可能会受到欢迎……我怀疑这里有多少押韵或理由(我可以确认这些决定可以追溯到20世纪90年代)<代码>[abc]可能是标准徽标方言(如Berkeley徽标)和Lisp的某种混乱遗留物。
print (word "[" (reduce [ [acc x] -> (word acc " " x) ] xs) "]")