代理人死亡如何肯定会影响代理人 运行 的 `while` 循环?
How does agent death surely affect the `while` loop that the agent is running?
正如下面的测试所示,如果一只海龟在死亡时是 运行 和 while
,那么它会跳出 while
(没有任何错误)。 NetLogo 保证这种行为吗?
to test
ca
let age 0
crt 1
ask turtle 0 [
while [true] [
set age (1 + age)
print (word "age is " age)
if (random-float 1 < 0.1) [die] ;death ends the while
]
]
end
是的——每当乌龟执行“死”时,它会立即停止执行任何命令。在您的例子中,while 循环(和“询问 turtle 0”)被终止。海龟也会自动从所有代理集中删除。
如果您使用“[die show “I'm dead!”]”而不是“[die]”,代码将永远不会显示“I'm dead!”因为它一执行“die”就停止了。
(如果你曾尝试用另一种编程语言编写一个移除代理的模型,你应该领会到 NetLogo 的“die”原语是多么神奇。在其他语言中,做同样的事情可能是一场复杂的噩梦。)
正如下面的测试所示,如果一只海龟在死亡时是 运行 和 while
,那么它会跳出 while
(没有任何错误)。 NetLogo 保证这种行为吗?
to test
ca
let age 0
crt 1
ask turtle 0 [
while [true] [
set age (1 + age)
print (word "age is " age)
if (random-float 1 < 0.1) [die] ;death ends the while
]
]
end
是的——每当乌龟执行“死”时,它会立即停止执行任何命令。在您的例子中,while 循环(和“询问 turtle 0”)被终止。海龟也会自动从所有代理集中删除。
如果您使用“[die show “I'm dead!”]”而不是“[die]”,代码将永远不会显示“I'm dead!”因为它一执行“die”就停止了。
(如果你曾尝试用另一种编程语言编写一个移除代理的模型,你应该领会到 NetLogo 的“die”原语是多么神奇。在其他语言中,做同样的事情可能是一场复杂的噩梦。)