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

Error in Netlogo foreach when trying to find the diff between two list items

我正在尝试获取两个数组每个位置的差异并将它们放入第三个数组中:

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。

从技术上讲,您可以让 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 )