2017-05-05 49 views
0

我试图将旧代码移植到最新版本(6.0.1),下面的foreach循环在Netlogo 4.1.3上正常工作,但是将代码复制并粘贴到版本6.0.1时,“item 0?“不起作用。它说“?”未定义。这行代码是假设检索段Netlogo foreach嵌套列表

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 

在“段”的通过内部列表项变量包含以下列表:

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

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

我试图通过阅读新的用户手册来找到类似的作品,但无济于事,也许我没有看到正确的地方。希望你们中的一些人能够指引我正确的方向。

回答

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 

在这里,我明确指出,整个过程中列表项将被称为“xy_coords”。这是一个很好的变化,因为你的变量可以有更多有意义的名字,所以允许更多可读的代码。

+0

感谢您的示例和有用的链接。我猜想我看起来不够努力,我正在寻找转换指南之类的东西。 –

+2

是的,在6.0.1中,当变量名是单个变量时,可以(谢天谢地)删除括号,例如:'foreach ex [xy_coords - > ...]'。 –

+0

啊,甚至更好。感谢更新! –