我希望用列表划分列表中的每个元素,我尝试了以下内容:
方法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]
似乎不起作用。
请帮忙。提前谢谢。
答案 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-item
和item
的组合来执行此操作:
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