【问题标题】:NETLOGO: adding lists of agents' attributes to a list of listsNETLOGO:将代理属性列表添加到列表列表中
【发布时间】:2018-11-28 11:42:07
【问题描述】:

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

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

这应该会创建一个由前一个主列表和列表 [attribute_1 attribute_2] 组成的新列表。 不幸的是,这不起作用,我收到错误:EXPECTED LITERAL VALUE 指的是“主列表”。 我应该如何编写代码以正确的方式创建列表列表?

【问题讨论】:

    标签: list netlogo nested-lists


    【解决方案1】:

    您可以使用lputfput 将更多元素添加到列表中(lput 将在末尾添加新列表项(l=last),而fput 将在前面添加新项(f=第一))。 此外,当您想将变量存储在列表中时,您必须使用(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
    

    【讨论】:

      【解决方案2】:

      Tyr 的回答在技术上是正确的,但我想建议一种更网络化的方式来做到这一点。通常,在 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
      

      【讨论】:

      • 非常感谢 Nicolas,您的代码确实可以正常工作,但对于我的特定应用程序,我需要代理一次将其属性添加到列表中。还是谢谢你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多