我正在编写一个程序(Pass-Away-Space
)来计算从原点(start-patch
)到世界各地的海龟的死亡率。每只乌龟根据其与原点的距离(start-patch
)计算出自己的死亡率。我试图为此过程实现的代码如下:
to Pass-Away-Space
ask turtles [
let chances 1 - exp( -1 * mortality * [distance start-patch] of turtles)
if chances >= 1 [die
set dead-count dead-count + 1
]
]
end
我得到的错误是 预期输入为数字,但得到了列表 。我不知道问题是什么,我想知道是否有人可以指出并纠正代码中的问题。
答案 0 :(得分:1)
这里的问题是你的of turtles
。由于一个问题程序一次影响一只乌龟,上面程序中的每只乌龟都在评估所有海龟的[distance start-patch]
而不是它自己到起始补丁的距离。为了澄清,请查看以下设置:
globals [ start-patch ]
to setup
ca
reset-ticks
crt 10 [
setxy random 30 - 15 random 30 - 15
]
set start-patch patch 0 0
end
to incorrect-example
ask turtles [
print ([ distance start-patch ] of turtles)
]
end
to correct-example
ask turtles [
print distance start-patch
]
end
比较incorrect-example
和correct-example
程序的打印输出,您会看到当您使用[distance start-patch] of turtles
时,您会获得所有海龟的距离列表。当您ask turtles
评估turtles-own
变量(包括颜色,大小等)时,每只乌龟将自动访问该变量的自己版本 - 无需指定哪个乌龟。因此,您的pass-away-space
可能看起来更像下面(未经测试):
to Pass-Away-Space
ask turtles [
let chances 1 - exp( -1 * mortality * (distance start-patch) )
if chances >= 1 [
die
set dead-count dead-count + 1
]
]
end