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

Netlogo - accessing patches or agents in lists?

我有一个补丁列表。我使用列表而不是补丁集,因为元素必须保持有序,因此可以将其用作创建其他列表的参考。我正在寻找创建这些补丁的属性列表,但 "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 expected input to be a turtle agentset or patch agentset or turtle or patch but got the list [(patch 2 4) (patch 3 4) (patch 4 4)] instead.

我需要找出一种新方法来获取这些补丁属性并创建新列表。非常感谢任何帮助!

使用与代理集不同的原语来操作列表。 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

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