netlogo中的处理顺序

netlogo中的处理顺序,netlogo,Netlogo,我不确定netlogo如何处理命令。考虑下面的场景。有100只海龟。“go”过程调用以下其他过程:A、B和C。过程A告诉海龟做一些事情,过程B告诉海龟做一些事情,过程C告诉海龟做一些事情 理解X: 我的理解是,所有海龟都会完成A中的命令,然后所有海龟都会完成B中的命令,然后所有海龟都会完成C中的命令 现在,在过程A中有命令A1、A2和A3 理解Y: 我的理解是,在程序A中,一只海龟会执行命令A1,然后A2,然后A3,然后第二只海龟会执行命令A1,A2和A3,依此类推 我的理解正确吗? 感谢您提供

我不确定netlogo如何处理命令。考虑下面的场景。有100只海龟。“go”过程调用以下其他过程:A、B和C。过程A告诉海龟做一些事情,过程B告诉海龟做一些事情,过程C告诉海龟做一些事情

理解X: 我的理解是,所有海龟都会完成A中的命令,然后所有海龟都会完成B中的命令,然后所有海龟都会完成C中的命令

现在,在过程A中有命令A1、A2和A3

理解Y: 我的理解是,在程序A中,一只海龟会执行命令A1,然后A2,然后A3,然后第二只海龟会执行命令A1,A2和A3,依此类推

我的理解正确吗?
感谢您提供的任何见解。

视情况而定。基本规则是,用户按下go按钮(或在命令中心键入“go”),然后通知NetLogo运行go过程。NetLogo从上到下运行该过程。但是如何包含被调用的过程会改变顺序

考虑第1版。第一行
询问海龟
说选择一只随机海龟,让它做代码块中的所有事情(由[]符号分隔),然后选择下一只随机海龟,让它做所有事情,然后是下一只海龟,直到所有海龟都完成。在这种情况下,proc-A和proc-B都在同一个代码块中,因此在NetLogo切换到下一个turtle之前,turtle将同时执行这两个操作

to go
  ask turtles
  [ proc-A
    proc-B
  ]
end

to proc-A
  forward 1
  set heading heading + random 10
end

to proc-B
  forward 3
  set heading heading - random 20
end
第二版怎么样?第一行
询问海龟[proc-A]
说选择一个随机海龟,让它在代码块(由[]符号分隔)中完成所有操作,在本例中,代码块仅为proc-A。然后选择下一个随机海龟,让它完成所有操作,然后是下一个海龟,直到所有海龟都完成。只有在所有海龟都完成了
ask-turtles
之后,代码才会转到下一行。因此,在这种情况下,所有的海龟都做proc-A,然后所有的海龟都做proc-B

to go
  ask turtles [ proc-A ]
  ask turtles [ proc-B ]
end

to proc-A
  forward 1
  set heading heading + random 10
end

to proc-B
  forward 3
  set heading heading - random 20
end
您还可以执行类似于版本3的操作。第一行是运行proc-A,它让每只海龟都做些事情。然后,在proc-A结束时,控制返回go过程并移动到下一行,即运行proc-B过程。这将获得与版本2相同的结果

to go
  proc-A
  proc-B
end

to proc-A
  ask turtles
  [ forward 1
    set heading heading + random 10
  ]
end

to proc-B
  ask turtles
  [ forward 3
    set heading heading - random 20
  ]
end
当我教授NetLogo时,我鼓励我的学生按照版本3的思路构建代码。这是因为
ask
与要求他们执行的操作在同一个过程中。这有几个优点。(1) 更容易阅读,因为您不必尝试阅读可能相隔很远的过程。(2) 避免嵌套的
ask
的最常见初学者问题之一-在go过程中使用
ask-turtles
,然后再次将
ask-turtles
作为调用过程的第一行。这实际上是一个常见的错误,NetLogo开发人员已经使嵌套的任务变得不可能

然而,如果你真的希望一只乌龟在下一只乌龟开始之前做不止一件事,那么你有两个选择。您可以使用版本1中的代码。或者你把你想让乌龟做的两件事放在同一个程序中