2016-04-09 10 views
0

Итак, у меня есть список списков. Любопытное так:Список ссылок в списке NetLogo

set plist [(list patch-at 0 0 100) (list patch-at 20 20 70) ...] 

Таким образом, результирующий список представляет собой список пар «патч, номер». Что мне нужно сделать, так это сделать foreach на этом plist, и для каждого списка в этом списке я хочу уменьшить число, скажем, в «go». Поэтому каждый тик, я хочу, чтобы число было 1 меньше.

Мне не удалось найти способ добраться до этого номера. Там есть код я в идти, спросить черепах []:

foreach listp [ 
    set item 1 ??? item 1 ??? - 1 
    if item 1 ??? <= 0 [remove ??? listp] 
    ] 

Где ??? для имени списка, которого я не знаю (вложенные списки). Очевидно, что я пытаюсь удалить патч из списка после 100 тиков.

Есть ли способ ссылаться на эти списки или способ как-то вызвать «установить элемент 1» без указания имени списка?

Заранее благодарен! :)

ответ

1
turtles-own [plist] 

to setup ;;create an initialize some turtles 
    ask n-of 10 patches [ 
    sprout 1 [ 
     set plist (list (list patch-at 0 0 100) (list patch-at 20 20 70)) 
    ] 
    ] 
end 

to go ;;update the `plist` of each turtles 
    ask turtles [ 
    set plist map [list first ? (last ? - 1)] plist 
    set plist filter [last ? > 0] plist 
    ] 
end 
+0

Спасибо, ключ был '?' символ, о котором я не знал. Теперь имеет смысл. –

Смежные вопросы