простой NetLogo setxy для списка координат

По какой-то причине я ужасно не могу попросить черепах перейти к координатам xy в списке. Я пробовал несколько подходов, и хотя я понимаю, почему некоторые из них ошибочны, я не могу определить, что правильно.

(foreach [1 2 3 4] [-16-16-16-16] [12 11 10 9] [спросить черепаху? 1 [setxy? 2? 3]])

* после этого я мог бы установить список команд, например. setxy для каждого, но это кажется пустой тратой. Кроме того, я хотел бы вызвать черепаху по какой-то переменной, а не по элементу в списке.

Ideallty, я хотел бы установить список как переменный, например. set mylist [[0 1] [0 2] ...] Но я не уверен, как выполнять итерацию по элементам.

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


person d-cubed    schedule 08.11.2012    source источник


Ответы (1)


Ну, во-первых, ваш примерный код должен работать, если черепахи 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 превращает ваш turtles набор агентов в список, а item позволяет получить определенный элемент в списке.

Изменить:

Выполнение 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 ? ]
]
person Nicolas Payette    schedule 09.11.2012
comment
Очень хорошо. Это ответило на несколько моих вопросов о netlogo, например. индексация и некоторая полезная информация, например сортировать черепах. - person d-cubed; 09.11.2012
comment
Хороший подход, но, к сожалению, использование foreach, похоже, за это время изменилось (сейчас я использую Netlogo 6.0.4). Я попробовал ››› let координаты [[1 3] [2 2] [3 1] [3 -1] [2 -2] [1 -3]]] ››› координаты foreach [[ab] - ›create-turtles 1 [setxy ab]], но это не сработало. Кто-нибудь может мне помочь? - person Sayuri; 16.11.2018
comment
@Sayuri, тебе нужен foreach coordinates [ xy -> create-turtles 1 [ setxy item 0 xy item 1 xy ] ]. - person Nicolas Payette; 19.11.2018