2017-04-21 76 views
2

首先例如我可以使用變量修改NetLogo命令嗎?

to make-new-car [freq x y head ] if (random-float 100 < freq) and not any? turtles-on patch x y [ create-cars 1 [ setxy x y set heading head set color one-of base-colors ] ] end

但我希望有更多的汽車裝飾 - 不只是一個汽車品種。我也想保持它的簡單和insted的做(第一個功能就是上面一樣的):

to make-new-car [freq x y head ] if (random-float 100 < freq) and not any? turtles-on patch x y [ create-cars 1 [ setxy x y set heading head set color one-of base-colors ] ] end

to make-new-carSE [freq x y head ] if (random-float 100 < freq) and not any? turtles-on patch x y [ create-carsSE 1 [ setxy x y set heading head set color one-of base-colors ] ] end

,並通過只是在重複同樣的程序是冗餘與不同品種的名稱我想做這個(把品種名稱作爲參數,並將其與創建命令一起使用):

to make-new-car [freq x y head breed-name] if (random-float 100 < freq) and not any? turtles-on patch x y [ create-breed-name 1 [ setxy x y set heading head set color one-of base-colors ] ] end

但Netlogo抱怨create-breed-name未定義。有任何想法嗎 ?

回答

4

最簡單的方法是做create-turtles然後set breed breed-name。這是一個例子。

breed [ testers tester ] 

to make-turtles [ breed-name ] 
    create-turtles 1 [ set breed breed-name ] 
end 

to setup 
    make-turtles testers 
end 

你也可以做大概做run一些構建適當的字符串後,但我覺得上面的更直接。

+0

感謝分享>) – scagbackbone

2

跟Jen一起回答。到目前爲止,它是實現你所需要的最直接的方式。

只是爲了它的緣故,但是,這裏是run做到這一點的一種方法:

to make-new-car [freq x y head breed-name] 
    let commands [ -> 
    setxy x y 
    set heading head 
    set color one-of base-colors 
    ] 
    if (random-float 100 < freq) and not any? turtles-on patch x y [ 
    run (word "create-" breed-name " 1 [ run commands ]") 
    ] 
end 

請注意,我把應該由新創建的龜匿名的過程中要執行的命令(使用NetLogo 6.0.1語法),然後運行內部的字符串傳遞給run。你也可以把所有東西都放在一個大的字符串中,但是那麼你會丟失編譯器檢查,語法突出顯示,速度等。

但是,不要做任何這樣的事情。使用Jen的方法。

+0

uusefull,一定會在未來的NetLogo探索中使用它。謝謝 – scagbackbone

相關問題