Как сообщить значение соседа в Netlo go? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать список для сбора с пространством поведения, в котором указывается цвет соседа черепахи.

to-report north-color1
  set north-color []
  foreach sort turtles [the-turtle -> set north-color lput [color] of neighbors4 north-color]
  report north-color
end

строка «foreach» должна гарантировать, что порядок списка следует за черепахой 0, черепахой 1, черепахой 2 и т. Д. c в последовательном порядке. Однако я хочу, чтобы мой список выводил цвет их соседа выше, например [10, 20, 10, 20, 30 ...] Как я могу этого добиться?

1 Ответ

1 голос
/ 12 мая 2020

Это полная модель. Просто измените print north-color-map на print north-color, чтобы попробовать версию foreach.

to testme
  clear-all
  ask patches [if random-float 1 < 0.8 [sprout 1]]
  print north-color-map
end

to-report north-color
  let outlist []
  foreach sort-on [who] turtles
  [ this-turtle -> ifelse any? turtles-on [patch-at 0 1] of this-turtle
    [ set outlist lput [color] of one-of turtles-on [patch-at 0 1] of this-turtle outlist ]
    [ set outlist lput "none" outlist ]
  ]
  report outlist
end

to-report north-color-map
  report map
  [ this-turtle -> ifelse-value any? turtles-on [patch-at 0 1] of this-turtle
    [ [color] of one-of turtles-on [patch-at 0 1] of this-turtle ]
    [ "none" ]
  ]
  sort-on [who] turtles
end

Версия foreach, вероятно, легче понять. Он довольно точно соответствует тому, что вы пытались сделать - начните с пустого списка, а затем просмотрите список всех черепах в порядке who (sort-on [who] turtles создает этот список) и вычисляет цвет черепахи на севере. патч. Чтобы найти север, нужно набрать patch-at 0 1, но вы также должны указать север от чего - следовательно, [patch-at 0 1] of this-turtle. И one-of - это выбрать одну черепаху из набора всех черепах в этом патче - NetLo go не может сказать, что у него всегда будет одна или ни одна, поэтому вы получите ошибку, по существу, говорящую: 'Я не знаю цвет какой черепахи найти.

Во второй версии используется map. Он делает то же самое, но применяет функцию ко всем членам списка без явного создания l oop. Код немного проще, потому что вам не нужен пустой список и различные операторы lput. Вы также должны представить все как репортер, а не как команду. Но map может быть немного сложнее, чтобы разобраться в этом.

...