2017-05-05 76 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

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