Краткий ответ - да, это возможно.
Вот полная модель с распечаткой, чтобы вы могли видеть, что она делает.
turtles-own [mylist]
to setup
clear-all
create-turtles 10
[ set color blue
set mylist (list random 10)
]
ask turtles [ create-links-with n-of 2 other turtles ]
layout-circle turtles 7
ask turtles [show mylist]
ask one-of turtles [add-item-egonet]
ask turtles [show mylist]
reset-ticks
end
to add-item-egonet
let new-value 3
let targets (turtle-set self link-neighbors)
ask targets
[ set color red
set mylist lput new-value mylist
]
end
Вы не сказали, что произошлокогда вы попробовали свой код, но получили бы ошибку, потому что item
и list
являются ключевыми словами NetLogo. У вас также есть логическая ошибка - когда вы ask
черепаха, вы переключаете перспективу (или «контекст» в терминологии NetLogo) на эту черепаху, последующий turtles-here
подхватит всех черепах в этом же патче.
Большая разница между нашими подходами заключается в том, что я использовал наборы агентов, а не списки. Это можно сделать, просматривая список черепах, но если вы пишете код NetLogo, который запускает foreach
над списком черепах, первое, что вы должны сделать, это переосмыслить свой подход. Существуют конкретные ситуации, когда вам нужны списки черепах, например, если вам нужно отслеживать последовательность других черепах, с которыми встречалась черепаха. Однако, если вы не находитесь в одной из этих ситуаций, лучше использовать наборы агентов и ask
.
Итак, переключаясь на парадигму наборов агентов, мой код создает набор агентов из черепах, который я хочу изменить (выбранной черепахи и ее соседей по сети), а затем просто говорит им добавить новое значение в конце их собственных списков значений.
Обратите внимание, что в рамках модели это может быть достигнуто с помощью одной строки путем построениянабор черепах одновременно с запросом, но было бы более типично делать что-то вроде (изнутри ask
, так что перспектива - какая-то выбранная черепаха):
set mylist lput new-value mylist
ask link-neighbors [ set mylist lput new-value mylist ]