Netlogo foreach嵌套列表

时间:2017-05-05 07:09:33

标签: netlogo

我正在尝试将旧代码移植到最新版本(6.0.1),以下foreach循环在Netlogo 4.1.3上正常工作,但是当将代码复制并粘贴到版本6.0.1中时,“项目0?”不起作用。它说“?”未定义。该行代码假设要检索段

中的列表项
to setup-row [row colour segments]
  foreach segments
  [
      if pycor = row * row-patches-width and
        (pxcor >= col-patches-width * (item 0 ?)) and (pxcor <= col-patches-
         width * (item 1 ?))
          [set pcolor colour
            output-print item 0 ?]
  ]
end

传入的“segments”变量包含以下列表:

  setup-row  4 blue [[-8 -5] [-3 -1] [0 3] [5 9]]

如果代码工作正常,它应该检索-8(项目0?)和-5(项目1?),依此类推。我在旧代码中假设的是“?”是从[-8 -5]中检索到的第一个列表,并且(项目0?)检索到-8而(项目1?)检索到-5。

我试图阅读新的用户手册,找到类似但无效的东西,或者我找不到合适的地方。希望你们中的一些人能指出我正确的方向。

1 个答案:

答案 0 :(得分:4)

是的,在Netlogo 6.0中已经更改了 - 请参阅transition guide page。有关新foreach语法的更多详细信息,请参阅dictionary entry。基本上,您现在不是使用?,而是明确定义要在foreach过程中使用的变量名称。按照上面的列表示例:

to foreach-example

  let ex [ [-8 -5] [-3 -1] [0 3] [5 9] ]

  foreach ex [
    [ xy_coords ] ->
    ask patches with [ pxcor = (item 0 xy_coords) and pycor = ( item 1 xy_coords) ] [
      set pcolor white
    ]
  ]

end

在这里,我明确声明列表项将被调用&#34; xy_coords&#34;整个过程。这是一个很好的变化,允许更可读的代码,因为你的变量可以有更有意义的名称。