使用代码示例中的过程时出现 Netlogo 错误 许多区域示例过程

Netlogo error when using procedure from code example Many Regions Example procedure

我是 Netlogo 的新手。我正在尝试使用库的许多区域示例中包含的代码。但是我在这个过程中遇到一个错误

 to keep-in-region [ which-region  ] 
 if region != which-region [
 let region-min-pxcor first item (which-region - 1) region-boundaries
 let region-max-pxcor last item (which-region - 1) region-boundaries
 let region-width (region-max-pxcor - region-min-pxcor) + 1
 ifelse xcor < region-min-pxcor [ 
 set xcor xcor + region-width      ]
 [if xcor > region-max-pxcor [   
 set xcor xcor - region-width
  ]
 ]
 ]

我得到的错误是....有什么建议吗?提前致谢

-1 不等于 cero。 卖家 31 运行 ITEM 时出错 由程序 KEEP-IN-REGION 调用 由过程 ADJUST 调用 由程序 GO 调用 Botón 打电话给 'go'

您遇到的错误(“-1 不大于或等于零。”,一旦翻译成英语)是由于将 -1 作为 item 原语的索引传递造成的。

代码中有两行使用了item:

let region-min-pxcor first item (which-region - 1) region-boundaries
let region-max-pxcor last item (which-region - 1) region-boundaries

如您所见,(which-region - 1) 是作为索引传递给 item 的表达式。如果你得到 -1,那一定是因为 which-region = 0.

在"Many Regions Example"模型中,区域0是为不属于任何区域的小块保留的,即作为区域边界的小块。区域本身从 1 开始编号。

在您的代码中查找调用 keep-in-region 的位置,并确保您使用的区域编号介于 1 和您拥有的区域数量之间(含)。

免责声明:我最初编写了 "Many Regions" 代码示例。也许我可以为任何区域之外的补丁使用像 nobody 这样的值,并从 0 而不是 1 开始对实际区域进行编号,但我不记得我是否主动决定反对它或者只是不认为