Netlogo: преобразование репортера в анонимную процедуру - PullRequest
0 голосов
/ 29 октября 2018

У меня проблемы с преобразованием более старой модели в Netlogo 6. В частности, у меня есть два списка процессов репортера, которые я не могу корректно работать с новым синтаксисом. Оба включают старый синтаксис «2-1», используемый в V5.0 и ниже. Буду признателен за любую помощь. Вот код

to-report util-partial-sums [#lst]                                                                  
  set #lst (fput [0] #lst)  
  report butfirst reduce [lput (?2 + last ?1) ?1] #lst 
end


to-report util-compare-adjacent-pairs-in-list [randnum specieslist]

let post 0
let list1 (butlast specieslist)                                                                      
let list2 (butfirst specieslist)                                                                      

ifelse randnum <= first specieslist [set post 0]                                                     
  [ifelse randnum > last specieslist [set post position (last specieslist) specieslist]              
    [
       (foreach list1 list2 [
          if randnum > ?1 and randnum <= ?2 [set post ((position ? specieslist) + 1)]])              
    ]
  ]
report post
end 

1 Ответ

0 голосов
/ 02 ноября 2018

Анонимные процедуры теперь требуют явного определения параметров (in-line), а не использования предварительно определенных 1/2.

Как говорится:

[lput (?2 + last ?1) ?1]

должно быть сопоставлено с

[[x y] -> lput (y + last x) x]

Та же проблема возникает в цикле for.

Это особенно полезно: https://ccl.northwestern.edu/netlogo/docs/programming.html#anonymous-procedures

Анонимная процедура требует более одного ввода
нет ничего

(foreach xs ys [[x y] -> setx x + y])

(карта [[x y] -> x mod round y] xs ys)

...