在每一次勾选时,我都会要求每个补丁根据其8个邻居的计数来更新其计数。如果多于4个邻居的计数大于或等于1,则它们更新1。如果多于4个邻居的计数小于或等于1,则补丁计数应设置为0。
当我运行代码时,我得到以下错误:
">=运算符只能用于两个数字、两个字符串或两个相同类型的代理,但不能用于TRUE/FALSE和一个数字。当补丁27-22运行>=时,由过程SPREAD-ERRORS调用,由过程GO调用。"
to spread-errors ;; Errors spread prior to addition of random error
;; This is dependent upon majority of neighbors with errors
ask patches [
ifelse count neighbors with [n >= 1] > 4
[update-n 1]
[set n n = 0]
]
end
您指的是set n 0
,而不是set n n = 0
。
但是,为什么set n n = 0
实际上是有效的NetLogo语法,它是如何导致您收到错误消息的呢?
n = 0
是一个布尔表达式,其值为true
或false
。然后你把这个值存储在n中。效果就像你写了:
ifelse n = 0 [ set n true ] [ set n false ]
运行此命令后,n保持布尔值。然后,下次运行n >= 1
时,您会收到上面的错误消息,因为n不再是一个数字,无法与1进行比较。