2017-05-05 21 views
0

Ich versuche, einen älteren Code auf den neuesten (6.0.1) zu portieren, die folgende foreach-Schleife funktioniert gut auf Netlogo 4.1.3, aber wenn Sie den Code in Version 6.0.1 kopieren und einfügen, "item 0? " funktioniert nicht. Es sagt das "?" ist nicht definiert. Das Codezeile ist wohl das Element der Liste innerhalb des SegmentsNetlogo foreach verschachtelte Liste

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 

Das bestanden in „Segmente“ Variable enthält die folgenden Listen abzurufen:

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

Wenn der Code korrekt funktioniert es, sollte die -8 mit (Element 0?) und -5 mit (Element 1?) und so weiter abrufen. Was ich im alten Code angenommen habe ist, dass das "?" sind die erste Liste, die von Segmenten abgerufen wird, die [-8 -5] und (Element 0?) die -8 abgerufen und (Element 1?) die -5 abgerufen.

Ich habe versucht, das neue Benutzerhandbuch durchzulesen, um etwas zu finden, das ähnlich funktioniert, aber ohne Erfolg oder vielleicht habe ich nicht an der richtigen Stelle gesucht. Ich hoffe, einige von Ihnen können mich in die richtige Richtung weisen.

Antwort

4

Ja, das wurde in Netlogo 6.0 geändert - siehe transition guide page. Weitere Einzelheiten zur neuen Syntax foreach finden Sie unter dictionary entry. Anstatt ? jetzt zu verwenden, definieren Sie explizit die Variablennamen, die in der Prozedur foreach verwendet werden sollen. Nach der Liste Beispiel oben:

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 

Hier erkläre ich ausdrücklich, dass die Listenelemente „xy_coords“ während des gesamten Verfahrens aufgerufen werden. Es ist eine nette Änderung, die mehr lesbaren Code ermöglicht, da Ihre Variablen aussagekräftigere Namen haben können.

+0

danke für das Beispiel und die nützlichen Links. Ich denke, ich habe nicht intensiv genug gesucht, ich suchte nach etwas wie dem Übergangsleitfaden. –

+2

Ja, und in 6.0.1 können Sie (glücklicherweise!) Die Klammern um den Variablennamen löschen, wenn es sich um eine einzelne Variable handelt, z. B .: 'foreach ex [xy_coords -> ...]'. –

+0

Ah, noch besser. Danke für das Update! –