Netlogo - 预期的常量错误

时间:2015-04-23 09:28:15

标签: foreach netlogo

我有这行代码:

set SSB sum [foreach  [foglie with [ipotetico? = false]] [((([media] of self ) - media-tot ) ^ 2) * ([larg] of self * [altez] of self)]]
  • foglie 是代理商名单;
  • media-tot 是一个全局变量

我无法弄清楚为什么它会给我错误:

  

预期常数

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

set SSB 0
ask foglie with [ipotetico? = false] [ set SSB (SSB + (( [media] of self - media-tot) ^ 2) * ([larg] of self * [altez] of self)) ] 
  • 您怎么看?
  • 如何让第一个代码生效?
  • 第二个代码是否相同?

1 个答案:

答案 0 :(得分:3)

一个好问题将包括问题的 minimal 示例。在这种情况下,在您上面的第一次尝试中,看起来您不了解代理集和列表之间的区别,也不了解foreach的使用。所以你需要阅读这个。

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

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

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