1

何らかの理由で、リスト内の xy 座標に移動するようにタートルに要求することにひどく失敗しています。私はいくつかのアプローチを試しましたが、それらのいくつかが間違っている理由はわかりますが、何が正しいのかを特定できません。

(foreach [ 1 2 3 4] [-16 -16 -16 -16] [12 11 10 9] [タートルに尋ねる ?1 [setxy ?2 ?3 ]])

*これに続いて、たとえば setxy などのコマンドのリストをそれぞれに設定できますが、それは無駄に思えます。さらに、リスト内のアイテムではなく、何らかの変数でタートルを呼び出したいと思います。

理想的には、たとえば set mylist [[0 1] [0 2]...] などの変数としてリストを設定したいと思いますが、アイテムを反復処理する方法がわかりません。

http://ccl.northwestern.edu/netlogo/docs/dictionary.html#foreach

4

1 に答える 1

6

まず第一に、タートル 1、2、3、および 4 が存在する場合、サンプル コードは機能するはずです。NetLogo のタートルは からインデックス化されて0いるため、次のようなことをしている可能性があります。

create-turtles 4
(foreach [1 2 3 4] [-16 -16 -16 -16] [12 11 10 9] [ask turtle ?1 [setxy ?2 ?3]])

そして、次のようなものを取得しています:

ASK expected input to be an agent or agentset but got NOBODY instead.

...あなたのコードが存在しない を試みてaskいるためです。turtle 4最初のリストを に変更する[0 1 2 3]と、それが修正されます。

今、それはあなたがやりたいことをするための最良の方法ですか?確かな情報はありませんが、次のようなものが欲しいと思われます:

clear-all
let coordinates [[-16 12] [-16 11] [-16 10] [-16 9]]
create-turtles length coordinates
(foreach (sort turtles) coordinates [
  ask ?1 [ setxy item 0 ?2 item 1 ?2 ]
])

エージェントセットをリストに変換し、リスト内の特定のアイテムを取得できることを知っていれば、それsort turtlesがどのように機能するかを理解できるはずです。turtlesitem

編集:

create-turtles length coordinates代わりに何かを行うcreate-turtles 4と、定義した座標の数と同じ数のタートルが確実に得られますが、それは状況に当てはまる場合と当てはまらない場合があります。

編集2:

タートルがまだ作成されていない場合にのみ機能する、さらに単純なアプローチは次のようになります。

clear-all
let coordinates [[-16 12] [-16 11] [-16 10] [-16 9]]
foreach coordinates [
  create-turtles 1 [ setxy item 0 ? item 1 ? ]
]
于 2012-11-09T01:48:03.367 に答える