您如何从海龟列表中找到特定变量的总和?
我正在尝试对海龟列表中的一个变量求和,并将该总和与询问海龟的特定值进行比较,但我不确定语法是什么。
每只都有自己的特定列表,由其他海龟组成,[mylist]
,我希望将它们var_x
汇总并将其与询问的var_x
进行比较。
ask turtles [
set ListVarXSum ( sum (var_x) of each turtle on list [mylist] )
]
你想做的事最直接的方法是:
set ListVarXSum sum map [ t -> [ var-x ] of t ] mylist
map
基元将海龟列表转换为由每只海龟的var-x
值填充的列表。然后,您可以使用 sum
对该列表求和。
话虽如此,Luke C 是对的,将代理存储在代理集中通常比存储在列表中更方便(除非您需要它们按特定顺序排列或您有重复的代理)。
要将代理列表转换为代理集,始终可以使用turtle-set
基元。使用它,您可以执行以下操作:
set ListVarXSum sum [ var-x ] of turtle-set mylist
它读起来更好,但由于每次将列表转换为代理集需要时间,因此运行速度较慢。如果这是您需要经常执行的操作,则最好预先存储一个代理集(可能通过使用turtle-set
将您放入mylist
的任何内容转换为代理集,或者使用无论如何都会为您提供代理集的基元,如 Luke 的n-of
示例。
如果我了解您的目标,最简单的方法是不使用海龟列表,而是使用海龟的代理集进行比较。看看这个简单的例子,看看它是否满足了你的需求:
turtles-own [
var_x
my_comparison_turtles
]
to setup
ca
crt 10 [
set var_x 3 + random 10
setxy random-xcor random-ycor
]
ask turtles [
set my_comparison_turtles n-of 3 other turtles
]
reset-ticks
end
to sum-compare
ask turtles [
let temp_sum sum [var_x] of my_comparison_turtles
print ( word "My var_x is " var_x ", and the sum of my comparison turtles' var_x is " temp_sum "." )
]
end