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



我试图将两个数组的每个位置的差异放入第三个数组中:

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 ) 

最新更新