Netlogo: переменная иногда список иногда номер, приводит к ошибке - PullRequest
1 голос
/ 11 июля 2019

У меня есть репортер, который прекрасно работает, когда я его запускаю, но ошибочно, когда я добавляю к нему условие.

У всех моих черепах есть два трехмерных вектора, называемые var_a и var_b.Когда я запускаю это для всего моего мира, нет проблем:

to-report turtle-bounds [p]
      let p-lower (([item 0 var_a] of p) - ([item 0 var_b] of p))
      let p-upper (([item 0 var_a] of p) + ([item 0 var_b] of p))
      let bounds list p-lower p-upper
      report bounds
end

Но когда я запускаю его с условием,

to condition
    let p1 turtles with-max [item 0 var_a]
    turtle-bounds p1
end

, я получаю следующее:

  • ожидал, что ввод будет числом, но вместо этого получил список [0.9967359117803329].

, который ссылается на значение var_a, что означает, что мое ограничение каким-то образом делает [item 0 var_a] of p дайте список вместо числа.

Есть мысли?

1 Ответ

2 голосов
/ 12 июля 2019

turtle-bounds написано, чтобы принять один агент в качестве аргумента, но with-max возвращает набор агентов.Вы можете превратить набор агентов в агент, используя примитив one-of, прежде чем передать p1 в turtle-bounds.

to condition
    let p1 turtles with-max [item 0 var_a]
    turtle-bounds one-of p1
end

Кроме того, вы можете проверить p в turtle-bounds, чтобы увидеть, является ли он набором агентов

if is-agentset? p [set p one-of p]

, и выполнить преобразование там, особенно если есть другие случаи, когдаturtle-bounds может быть задан набором агентов, а не агентом.

...