尝试查找两个列表项之间的差异时Netlogo foreach出错

时间:2017-08-07 01:09:23

标签: foreach netlogo

我试图将两个数组的每个位置区别开来并将它们放在第三个数组中:

let list1 [ 3 4 5 ]
let list2 [ 6 7 8 ]
let list3 [ ]

( foreach list1 list2 [
  [ a b ] -> lput ( a - b ) list3
] )

理想情况下,我会list3成为[ -3 -3 -3 ]之后。

当我尝试运行它时,我收到此错误:

FOREACH expected this input to be an anonymous command, but got an anonymous reporter instead

我做错了什么?我试过在函数周围添加括号,但我对NetLogo很新。

注意:我正在使用NetLogo 6.0.1。

1 个答案:

答案 0 :(得分:4)

从技术上讲,您可以让foreach像这样工作:

  let list1 [ 3 4 5 ]
  let list2 [ 6 7 8 ]
  let list3 [ ]

  ( foreach list1 list2 [
    [ a b ] -> 
    set list3 lput ( a - b ) list3 
  ] )

但是,在这种情况下,map可能是更好的原语:

  let list1 [ 3 4 5 ]
  let list2 [ 6 7 8 ]
  let list3 ( map [ [ a b ] -> a - b ] list1 list2 ) 
  print list3

编辑可见性:

Nicolas Payette在下面的评论中指出,map原语的语法更为简洁:

let list3 ( map - list1 list2 )