我有一个补丁列表。我使用列表而不是补丁集,因为元素必须保持有序,因此可以将其用作创建其他列表的参考。我正在寻找创建这些补丁属性的列表,但“ 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)] 代替。
我需要找出一种获取这些补丁属性并创建新列表的新方法。任何帮助将不胜感激!
答案 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
我认为应该有一种更清洁的方式来制作地图,该地图不使用匿名函数来访问补丁的变量,但是我脑子里一片空白。