2015-04-17 2 views
2

Привет у меня есть следующий код:Использование карты или foreach для суммирования в Netlogo?

to difusion-out 
    if any? turtles with [color = yellow and shape = "ai"] 
    [ 
    let mylist (list ([autoinduc] of turtles with [shape = "circle 2" and color = yellow])) 
    let mylist2 (list count turtles with [shape = "ai"]) 
    let mylist3 (map [?1 - ?2] (mylist) (mylist2)) 
    let mylist4 sum (mylist3) 
    let concentracion-se ((- kse * count turtles with [shape = "ai"]) + (2 * (mylist4))) 
    ask one-of turtles with [shape = "ai"] 
    [hatch concentracion-se 
    ] 
    ] 
end 

Что им пытаются сделать, это вычесть каждый из членов MyList каждый из членов mylist2 поэтому этот новый список с именем mylist3, необходимо суммировать все из член с использованием суммы команд. Но при запуске процедуры я получаю эту ошибку: - ожидаемый ввод - это число, но вместо этого получил список [0]. ошибка во время работы наблюдателя - Так в чем же проблема? Я не правильно определяю свои списки, или команда карты неправильно используется?

ответ

1

map выглядит хорошо для меня. Вы настраиваете свои списки неправильно:

let mylist (list ([autoinduc] of turtles with [shape = "circle 2" and color = yellow])) 

[autoinduc] of turtles with [shape = "circle 2" and color = yellow] возвращает список из черепахи autoinduc. Когда вы положите list перед ним, это заклеит весь список в еще. Таким образом, вы получаете [[1 2 3]] вместо [1 2 3].

Я думаю, что это тоже неправильно:

let mylist2 (list count turtles with [shape = "ai"]) 

count turtles with [shape = "ai"] возвращает число (число черепах с этой формой). Помещение list перед ним фиксирует это единственное число в списке. Таким образом, вы просто получаете список одного номера, который, вероятно, не тот, который вы хотите.

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