我想知道如何在列表中找到项目的“来源”。我为此任务需要考虑的操作如下:
1)在由乌龟创建的列表中添加了一个项目;
2)因为每只乌龟都有自己的列表,其中包含由不同的乌龟创建的物品,所以我想设置一个计数器,说明该乌龟多久选择一次甲龟的物品。
方法和代码:
这段代码在所选乌龟的列表中添加了一个名为'this_item'的项(局部变量):
ask one-of turtles [
set archive fput this_item archive
]
以及此其他代码将相同的项目添加到邻居的列表中:
ask in-link-neighbors [
set archive fput this_item archive
]
我将设置一个局部变量,例如从列表中选择的第一项。
let picked first archive
要查找该项目的来源,我想使用who
。但是,who
用于将乌龟提取后添加到自己的列表中的乌龟。
print (word "Source: " who " has this list " list " after added item " picked)
[如果我在乌龟创建新项目时使用自己将变量source
定义为项目的来源,则此报告仅报告源(学生)的品种,而不报告源的相应乌龟(例如学生2)。这使得无法计算选择一个来源项目的次数。
问题:
如何计算同一只乌龟选中一个项目的时间?
谢谢您的帮助和建议。
我想到的最简单的方法是让每个this-item
是一个由两个元素组成的列表,项目0是“项目”本身,项目1是源乌龟。然后用[>]由乌龟创建this-item
set this-item list x self
((请注意,“ item”本身是一个保留关键字,所以我的“ item”是x。)任何将
this-item
放在列表中的乌龟都会知道item 0 this-item
是事物本身,item 1 this-item
是它来自的乌龟。要计算列表中指定条目(例如archive
)的条目数量,该列表由给定龟(例如turtle 1
)拥有,给定的龟(例如turtle 3
)可以使用
ask turtle 1 [show length filter [a -> item 1 a = turtle 3] archive]
如果需要
turtle 3
在所有海龟档案中进行记录的次数,则可以分步进行。首先创建所有存档列表的列表。
let all-archives [archives] of turtles
然后使用地图遍历该列表,以列出每个档案中的条目数列表并对该列表求和。
show sum map [t -> length filter [a -> item 1 a = turtle 3] t ] all-turtles
((我现在无法测试,因此请检查语法。)当然,
turtles
可以是所有海龟的子集。
希望这会有所帮助,查尔斯