Netlogo - 预期的常量错误

Netlogo - expected constant error

我有这行代码:

set SSB sum [foreach  [foglie with [ipotetico? = false]] [((([media] of self ) - media-tot ) ^ 2) * ([larg] of self * [altez] of self)]]

我不明白为什么会出现错误:

expected constant

我发现了以下漏洞,但在我看来它并不优雅,甚至可能更慢:

set SSB 0
ask foglie with [ipotetico? = false] [ set SSB (SSB + (( [media] of self - media-tot) ^ 2) * ([larg] of self * [altez] of self)) ] 

一个好的问题将包括一个最小的问题示例。在这种情况下,在您上面的第一次尝试中,您似乎不了解代理集和列表之间的区别,也不了解 foreach 的用法。所以你需要阅读这篇文章。

  • sum 需要一个列表作为输入
  • 要用括号表示法制作列表,您只需要包含常量;否则,使用 list
  • 出于上述原因,将代理集放在括号中不会生成列表,但即使您使用 list,您也会得到一个包含代理集作为元素的列表,而不是代理列表
  • foreach 不是 return 列表(但 map 是)

假设 medialargaltez 是 foglie 属性并且 media-tot 是全局属性,您可以执行以下操作:

sum [(media - media-tot) ^ 2 * (larg * altez)] of (foglie with [ipotetico? = false])