2016-08-11 5 views
3

NetLogoを初めて使用しました。一般的なプログラミングにはまったく新しいものです。私はここで多くの役に立つものを読んでいます。今私は自分の知識で岩底を打ち、私の最初の質問をこれまでに尋ねることに決めました。どんなに愚かな私が鳴るかもしれない:NetLogoのネストされたifelseに関する問題

私はいくつかのカメを移動し、NetLogoの特定のパッチを回避しようとします。

loop [ 
ifelse any? Movers with [steps > 0] 
[  
ask Movers with [steps > 0] 
[ 
    ifelse patch-ahead 1 is-Patch? [ 
    ifelse not any? turtles-on patch-ahead 1 [ 
     ifelse [pcolor] of patch-ahead 1 != white [ 
     ifelse [pcolor] of patch-ahead 1 != brown [ 
fd 1 set steps steps - 1][turnTurtle] 
] 
     [turnTurtle] 
] 
    [turnTurtle] 
] 
    [turnTurtle] 
] 
] 
[stop] 
] 

ループは、すべてのムーバーが1回移動するまで実行する必要があります。それは私が "ステップ"変数の使用を追跡するものです。いずれかの条件がfalseの場合、 "turnTurtle"というプロシージャが呼び出されます。回したカメは、ループの次の実行中に移動しようとするか、または再び回り込みます。

コードを実行しようとすると「予想されるキーワード」エラーが発生します。どうして?

ProQuestion:パッチをチェックしてカメを飼うより良い方法はありますか?この非常にネスト化されたセットアップは貧しい選択かもしれませんか?

+0

ちょっとしたものとして、patch-ahead 1!= white と[patch-ahead 1!= brown]の[pcolor]を '[pcolor!= white and pcolor!=ブラウン] 1' –

答えて

3

コードを実行しようとすると「予想されるキーワード」エラーが発生します。どうして?

投稿したコードスニペットからこのエラーは発生しません。 (一般的には、誰かがNetLogoに貼り付けることができるコードの単純化された「完全な」例を投稿するようにしなければなりません。私はpatch-ahead 1 is-Patch?が反転されているので、 "一定の期待値"のコンパイルエラーが発生します。それは以下のようになります:

is-patch? patch-ahead 1 

多分その問題の原因は何ですか?

パッチと亀を確認する良い方法はありますか?この非常にネスト化されたセットアップは貧しい選択かもしれませんか?

正しく見てきたように、深くネストされたコードは望ましくなく、通常避けることができます。あなたのケースでは、それはandを使用して単一の式であなたの条件を組み合わせることによって達成することができます

ifelse is-patch? patch-ahead 1 
    and not any? turtles-on patch-ahead 1 
    and [ pcolor ] of patch-ahead 1 != white 
    and [ pcolor ] of patch-ahead 1 != brown 
[ 
    fd 1 
    set steps steps - 1 
] [ turnTurtle ] 

いくつかのより多くの発言:代わりに二つの別々の表現で!= white!= brownをチェックする

、あなたがそれらを組み合わせることができますmember?を使用して:

[ not member? pcolor [ white brown ] ] of patch-ahead 1 

代わりif発現およびとloopを組み合わせます210コマンド、あなただけwhileを使用することができます。

while [ any? movers with [ steps > 0 ] ] [  
    ask movers with [ steps > 0 ] [ 
    ; rest of your code here 
    ] 
] 

最後に、私はあなたがここにそれを必要とは思いませんが、複雑な制御フローコードのために、あなたはNetLogoに文のような「スイッチ」を追加cf extensionを使用することができます。

+0

あなたのアドバイスは私を大いに助けました。ありがとう!しかし、私は新しい問題に遭遇しました。私は[ここ](http://stackoverflow.com/questions/38898646/netlogo-model-gets-stuck-w-no-error-mesage)上に完全に単純化バージョンを置く – JackBox

関連する問題