如何选择netlogo中列表的前n项

sae*_*rad 3 netlogo

我有一个列表,如果列表的前 3 项不为 0,我想对它们进行操作。我可以通过下面的代码对每个项目进行操作,但不知道如何对前 3 项进行操作。

foreach list2
[
 if (item ? list2 != 0) 
  [
   set candidatelist lput (item ? list3) candidatelist
 ]
]
Run Code Online (Sandbox Code Playgroud)

Set*_*sue 6

这是获取前 n 个元素的助手:

to-report take [n xs]
  report sublist xs 0 min list n (length xs)
end
Run Code Online (Sandbox Code Playgroud)

现在我们可以写:

filter [x -> x != 0] take 3 ...
Run Code Online (Sandbox Code Playgroud)

样本运行:

observer> show filter [x -> x != 0] take 3 [1 0 3 4 5]
observer: [1 3]
Run Code Online (Sandbox Code Playgroud)

(这是 NetLogo 6 语法。在 NetLogo 5 中,写入[? != 0]而不是[x -> x != 0]。)