模型"人工神经网络 - 多层"有这个代码(目标函数来自界面,其值为' xor'或'或'):
to-report target-answer
let a [activation] of input-node-1 = 1
let b [activation] of input-node-2 = 1
;; run-result will interpret target-function as the appropriate boolean operator
report ifelse-value run-result
(word "a " target-function " b") [1][0]
end
我不明白' a'而且' b'如果它们在引号内,则转换为true或false。为什么他们只是出现在' a'和' b'?如果代码是
(word a " " target-function " " b) [1][0]
其实也有效,我可以理解语法,但是" a"和" B"困惑我。任何人都可以解释为什么这段代码有效吗?
答案 0 :(得分:2)
关键是run-result。 run-result
运行给定的字符串,就好像它是代码一样。因此,如果target-function
为or
,那么
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]
至于为什么这比(word a " " target-function " " b)
更可取,这部分是品味问题。它的击键次数更少,看起来可能更清晰。它还可以更好地处理某些类型的值。 <{1}}在创建要运行的字符串之前粘贴(word a " " target-function " " b)
和a
的值,而b
在实际运行时绑定值串。虽然这里永远不会有问题,但是如果我们有类似的代码那么重要:
(word "a " target-function " b")
let s "some string"
print runresult (word "length " s)
出现错误,因为它确实会尝试评估Nothing named SOME has been defined
。将此与
length some string
打印出let s "some string"
print runresult (word "length s")
。
在评论中,Seth提出了一个很好的观点,即实现这一目标的现代方法是使用tasks。要对任务执行此操作,我们会在代码中的其他位置将11
设置为target-function
(task or
的简写)。
然后我们将task [?1 or ?2]
更改为:
run-result (word "a " target-function " b")
这只是说“使用(run-result target-function a b)
和target-function
作为输入运行存储在a
中的代码并给我结果”。更干净!