Результат моего оператора ifelse зависит от действий для true / false? - PullRequest
2 голосов
/ 03 июня 2010

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

Однако мое утверждение if или ifelse, кажется, не отвечает должным образом, и ответ зависит от результата. С некоторыми тестами:

*turtles> ifelse ((patch (first dirx) (first diry)) = one-of neighbors4) [write "11"] [write "22"]
 "11"*

*turtles> ifelse ((patch (first dirx) (first diry)) = one-of neighbors4) [write "111"] [write "122"]
"122"*

*turtles> ifelse (patch (first dirx) (first diry)) = one-of neighbors4 [write "111"] [write "122"]
 "122"*

*turtles> ifelse (patch (first dirx) (first diry)) = one-of neighbors4 [write "11"] [write "12"]
 "12"*

*turtles> ifelse (patch (first dirx) (first diry)) = one-of neighbors4 [write "11"] [write "22"]
 "11"*

Обратите внимание, что в течение этого времени я не двигаю свой грузовик, я использую командный центр, чтобы задать эти вопросы (с точки зрения черепахового грузовика).

Я очень смущен этим. Как единственное, что я изменяю, это действие (что писать). Это не должно влиять на истинное / ложное утверждение.

Кто-нибудь знает, что здесь происходит и почему ifelse странно реагирует?

1 Ответ

2 голосов
/ 03 июня 2010

Это потому, что one-of случайным образом выбирает один из своих аргументов и возвращает его.

neighbors4 возвращает набор агентов с 4 патчами (N, S, E и W патча черепахи). Таким образом, one-of neighbors4 будет случайным образом выбирать из этих 4, поэтому он может возвращать разные значения при каждом вызове.

...