確かなことの1つは、殺そうとしているカメの間にリンクを作成する手間をかける必要がないということです。あなたの主な問題は、どのカメが死ぬ必要があるかを特定することです。これは再帰的な手順で達成できます。死ぬ必要のあるターゲットのカメがいますが、隣人に同じことをするように頼む必要があります(そして、彼らは順番に、彼らに尋ねるなど)
再帰の途中でカメを殺すと混乱するため、プロセスは少し複雑になりますが、殺す必要のあるカメをマークするためのフラグとして機能するカメ変数を使用することで、これを回避できます。そして最後にそれらすべてを殺します。
次のコードは、完全に機能する例を提供するはずです。
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