NETLOGO:将代理的属性列表添加到列表列表中

NETLOGO: adding lists of agents' attributes to a list of lists

您好,我正在使用 Netlogo,我正在尝试创建一个列表列表,其中每个子列表都是几个代理的属性。特别是我将列表声明为全局变量并将其初始化为空列表。然后我要求每个代理将他们的 attribute_1 和 attribute_2 的列表添加到主列表中。像这样:

globals[mainlist]
set mainlist []
ask agents[
set mainlist sentence [mainlist] [attribute_1 attribute_2 ]
]

这应该创建一个新列表,该列表由先前的主列表和列表 [attribute_1 attribute_2] 组成。 不幸的是,这不起作用,我收到错误:指的是 "mainlist" 的预期文字值。 我应该如何编写代码以正确的方式创建列表列表?

您可以使用 lputfput 向列表添加更多元素(lput 将在末尾添加新列表项 (l=last),而 fput 将在前面添加新项目 (f=first))。 此外,当您想将变量存储在列表中时,您必须使用 (list ... ...) 原语而不是 [ ] 括号(括号仅适用于常量)。

这是一个工作示例:

globals[mainlist]

to test
  ask n-of 20 patches [sprout 1]
  set mainlist []
  ask turtles 
  [
    set mainlist lput (list xcor ycor) mainlist  
  ]
  print mainlist
end

Tyr 的回答在技术上是正确的,但我想建议一个更 netlogoish 的方法来做到这一点。通常,在 NetLogo 中,您不必一次构建一个元素的列表。如果您发现自己这样做,您可能想停下来并尝试以不同的方式解决问题。

在这种特殊情况下,您可以简单地利用 of 原语:

[ (list attribute_1 attribute_2) ] of agents

这是一个完整的示例:

breed [agents an-agent]
agents-own [attribute_1 attribute_2]
globals [mainlist]

to setup
  clear-all
  create-agents 10 [
    set attribute_1 random 10
    set attribute_2 random 10
  ]
  set mainlist [ (list attribute_1 attribute_2) ] of agents
  print mainlist
end