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