Netlogo-访问列表中的补丁或代理?

时间:2018-11-29 05:53:47

标签: netlogo

我有一个补丁列表。我使用列表而不是补丁集,因为元素必须保持有序,因此可以将其用作创建其他列表的参考。我正在寻找创建这些补丁属性的列表,但“ of”似乎不适用于列表。 这是我要做的事情的简化版本:

;; create list of patches in front of player
set map-area (list patch-at -1 1 patch-at 0 1 patch-at 1 1)
;; create list of grass levels in those patches
set grass-layer-map (list [grass-amount] of map-area)
;; create list of how many turtles in each patch
set turtle-layer-map (list [count turtles-here] of map-area)

当我使用补丁集而不是列表时,此方法(使用“ of”)有效,但是现在出现以下错误:

  

OF预期输入为乌龟代理集或补丁代理集或乌龟   或补丁,但获得了列表[(补丁2 4)(补丁3 4)(补丁4 4)]   代替。

我需要找出一种获取这些补丁属性并创建新列表的新方法。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

使用不同于代理集的原语来操作列表。 《 NetLogo词典》有一个专门的节用于列表基元。在您的情况下,与of等效的是map

这将起作用:

patches-own [grass-amount]

to testme
  clear-all
  ask patches
  [ set grass-amount random 3
    sprout 2
  ]
  let map-area (list patch -1 1 patch 0 1 patch 1 1)
  print map-area
  ;; create list of grass levels in those patches
  let grass-layer-map map [ p -> [grass-amount] of p ] map-area
  print grass-layer-map
  ;; create list of how many turtles in each patch
  let turtle-layer-map map [p -> [count turtles-here] of p ] map-area
  print turtle-layer-map
end

我认为应该有一种更清洁的方式来制作地图,该地图不使用匿名函数来访问补丁的变量,但是我脑子里一片空白。