1

正如下面的测试所示,如果海龟while在死时正在运行 a,则它会中断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
4

1 回答 1

3

是的 - 每当乌龟执行“死亡”时,它会立即停止执行任何命令。在您的情况下,while 循环(和“ask turtle 0”)被终止。乌龟也会自动从所有代理集中删除。

如果您使用“[die show "I'm dead!"]" 而不是仅使用 "[die]",则代码将永远不会显示“I'm dead!”。因为它一执行“死”就停止了。

(如果你曾经尝试过用另一种编程语言编写一个删除代理的模型,你应该体会到 NetLogo 的“死亡”原语是多么神奇。在其他语言中,做同样的事情可能是一场复杂的噩梦。)

于 2021-09-11T14:48:58.487 回答