让海龟根据它们在列表中的排名顺序移动一次

Make turtles move ONCE according to their ranked order in a list

这个问题是在我之前的 2 个问题的基础上建立的。我一直在努力为我的海龟获得一个排名列表,按拥有的因素排名。然后他们需要按排名顺序移动。该部分工作得很好,代码可以在以下位置找到:

问题:使用该代码,它们以正确的顺序移动,但不是移动一次,程序似乎不断地为列表中的每只海龟重新运行它,所以第一只海龟在 10 人的世界中,最终移动 10 次,第二个移动 9 次,依此类推

我完全被这个难住了,但我需要它停止。他们应该移动一次并在那个滴答声中完成。想法?

列表创建代码为:

let rank-list sort-on [sociability] turtles
    let ranks n-values length rank-list [ ? ]  
   (foreach rank-list ranks [ask ?1 [set social_rank ?2] ] ) 
;;you can replicate the problem with this movement proc, or the full code in the link above       
 ask turtles [foreach rank-list [ask ? [set heading 270 forward 1]]]

行中:

ask turtles [foreach rank-list [ask ? [set heading 270 forward 1]]]

你要求每只乌龟为你rank-list中的每只乌龟执行命令

只需删除 ask turtles 部分。

作为更一般的注释:foreach 是列出什么 ask 是代理集。它们都做同样的基本事情,即对 "collection" 的每一项执行一条命令。代理集是唯一代理的无序集合。列表是任何类型的可能重复项的有序集合。