可以肯定的一件事是,您无需费心在要杀死的海龟之间建立联系。您的主要问题是确定哪些海龟需要死亡,这可以通过递归过程来完成:您有一个需要死亡的目标海龟,但您希望它要求它的邻居做同样的事情(而他们反过来,问他们的,等等)
这个过程稍微复杂一点,因为在递归中间杀死一只乌龟会搞砸,但你可以通过使用一个乌龟变量来解决这个问题,该变量用作标记需要被杀死的乌龟的标志,然后在最后杀死所有这些。
以下代码应提供一个完整的工作示例:
turtles-own [ marked-for-death ]
to setup
clear-all
ask patch 1 0 [ sprout 1 ]
ask patch 2 0 [ sprout 1 ]
ask patch 3 0 [ sprout 1 ]
ask patch 4 0 [ sprout 1 ]
ask patch 6 0 [ sprout 1 ]
ask patch 7 0 [ sprout 1 ]
ask patch 9 0 [ sprout 1 ]
end
to go
ask turtles [ set marked-for-death false ]
ask turtles-on patch 2 0 [ mark-for-death ]
ask turtles with [ marked-for-death = true ] [ die ]
end
to mark-for-death
set marked-for-death true
ask (turtles-on neighbors) with [ marked-for-death = false ] [ mark-for-death ]
end
这个例子杀死了补丁 2 0 上的海龟,以及所有链接到它的海龟。您将需要根据自己的目的对其进行调整,但这应该足以让您继续前进……
编辑:
稍微更优雅的版本,因为它不需要海龟变量(假设相同的setup
过程):
to go
let marked [ marked-for-death [] ] of turtles-on patch 2 0
ask turtle-set marked [ die ]
end
to-report marked-for-death [ marked ]
set marked fput self marked
ask (turtles-on neighbors)
with [ not (member? self marked) ]
[ set marked marked-for-death marked ]
report marked
end