每个嵌套列表的 Netlogo

Netlogo foreach nested list

我正在尝试将较旧的代码移植到最新的 (6.0.1),以下 foreach 循环在 Netlogo 4.1.3 上运行良好,但是当将代码复制并粘贴到版本 6.0.1 时 "item 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]]

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

我试图通读新的用户手册以找到类似的东西,但无济于事,或者我没有找对地方。希望你们中的一些人能给我指出正确的方向。

是的,在 Netlogo 6.0 中已更改 - 请参阅 transition guide page. For more detail on the new foreach syntax, see the 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

在这里,我明确声明列表项将在整个过程中被调用 "xy_coords"。这是一个不错的更改,允许更易读的代码,因为您的变量可以具有更有意义的名称。