你怎么能打破netlogo的问题? 例如......人们正在移动,突然一些条件得到了满足。现在您不希望要求代理执行(移动)并停止询问。并在询问后将控制传递到下一行。
在名为“停止”的程序中存在类似的东西。但不是要问。有办法吗?
答案 0 :(得分:4)
好吧,stop
确实突破了ask
。来自stop
的文档:
该代理立即从封闭程序,询问或类似构造(例如crt,hatch,sprout)退出。只有当前过程停止,而不是代理的所有执行。
所以你可以这样做:
ask turtles [
if stop-condition? [ stop ]
move-to one-of patches ; or whatever
]
print "done!"
...只要stop-condition?
变为真,执行就会突破ask
块并完成!"完成!"将被打印。
答案 1 :(得分:2)
虽然我真的很犹豫与Nicholas相矛盾,但我感到他的回答是这种情况具有误导性。缺少真实的break
语句是NetLogo的严重缺陷。在ask
内部,stop
比continue
更像break
。例如:执行以下代码将始终显示50。
to test
let ctr 0
crt 100 [set color blue]
ask n-of 50 turtles [set color red]
ask turtles [
if (color = red) [ stop ]
set ctr (1 + ctr)
]
print ctr
end