对列表的每个元素应用操作

时间:2014-08-04 09:17:14

标签: netlogo

我希望用列表划分列表中的每个元素,我尝试了以下内容:

方法1:

set item 0 (new-vec item 0 vec / number)
set item 1 (new-vec item 1 vec / number)

给出错误,这不是你可以在

上设置的东西

方法2:

 foreach new-vec
[ set ? ? / number]

似乎不起作用。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:4)

这是因为NetLogo lists是不可变的数据结构。

如果你真的想要可变性,你总是可以使用array extension,但是一旦你学会了正确使用NetLogo的不可变列表,这几乎是不必要的:lists primitives通常都是你需要的。

要将列表中的所有数字除以其他数字,请使用map

let new-vec [10 50 100]
let number 10
let divided-vec map [ ? / number ] new-vec

会将列表[1 5 10]分配给divided-vec

map操作通过对传递给它的列表的每个元素应用操作来构建新列表。在上面的示例中,我将新列表分配给了一个新变量(divided-vec),但如果您愿意,还可以将其分配回new-vec

set new-vec map [ ? / number ] new-vec

这就好像你修改了new-vec一样,但事实并非如此。

如果您想将操作仅应用于列表中的一个项目,则可以使用replace-itemitem的组合来执行此操作:

let my-list [2 4 6 8 10]
show replace-item 1 my-list (item 1 my-list  * 100)

将显示:[2 400 6 8 10]

答案 1 :(得分:1)

这是在NetLogo 6中进行的操作,该更改了匿名过程,因此在map中是如何完成的:

let new-vec [10 50 100]
let number 10
let divided-vec map [ i -> i / number ] new-vec