对NetLogo语法(`word`和`runresult`)感到困惑

对NetLogo语法(`word`和`runresult`)感到困惑,netlogo,Netlogo,“人工神经网络-多层”模型具有以下代码(目标函数来自接口,其值为“xor”或“or”): 我不明白如果“a”和“b”在引号内,它们是如何转换为真或假的。为什么它们不显示为“a”和“b”?如果代码是 (word a " " target-function " " b) [1][0] 事实上,这也行得通,我能理解语法,但“a”和“b”让我困惑。有人能解释一下这段代码的工作原理吗?关键在于运行结果运行给定字符串,就像它是代码一样。因此,如果目标函数为或,则 ifelse-value run-

“人工神经网络-多层”模型具有以下代码(目标函数来自接口,其值为“xor”或“or”):

我不明白如果“a”和“b”在引号内,它们是如何转换为真或假的。为什么它们不显示为“a”和“b”?如果代码是

    (word a " " target-function " " b) [1][0]
事实上,这也行得通,我能理解语法,但“a”和“b”让我困惑。有人能解释一下这段代码的工作原理吗?

关键在于<代码>运行结果运行给定字符串,就像它是代码一样。因此,如果
目标函数
,则

ifelse-value run-result
    (word "a " target-function " b") [1][0]
相当于

ifelse-value run-result "a or b" [1][0]
ifelse-value (a or b) [1][0]
这相当于

ifelse-value run-result "a or b" [1][0]
ifelse-value (a or b) [1][0]
至于为什么这比
(单词a“目标函数”b)
更可取,部分原因在于品味。它的按键次数更少,也许看起来更干净一些。它还可以更好地处理某些类型的值
(单词a“目标函数”b)
在创建要运行的字符串之前,会在
a
b
的值中粘贴,而
(单词“a”目标函数“b”)
在实际运行字符串时会在值中粘贴。虽然这在这里并不重要,但如果我们有这样的代码,那就很重要了:

let s "some string"
print runresult (word "length " s)
未命名为SOME的
错误已被定义
,因为它字面上试图计算
某个字符串的长度
。将此与

let s "some string"
print runresult (word "length s")
打印出
11

任务 在评论中,赛斯提出了一个很好的观点,即实现这一点的现代方式是通过。对于任务,我们将
目标函数设置为
任务或
(任务[?1或?2]
)代码中的其他位置

然后我们将
运行结果(单词“a”目标函数“b”)
更改为:

(run-result target-function a b)

这只是说“使用
a
b
作为输入,运行存储在
target函数中的代码,并给出结果”。干净多了

好问题,好答案。我想补充一点,该模型早于NetLogo的引入。它可能应该改为使用任务,而不是把字符串粘在一起这种丑陋的工作。我打开了它。