如果一个 NetLogo 过程包含多个递归调用,它们是如何处理的?

If a NetLogo procedure contains more than one recursive call, how are they processed?

在模型库中,Galton Box 模型中有这个过程。每次调用时,它都会进行两次递归调用,在左边一个影线和右边一个影线之后。

to propagate  ;; peg procedure
  if ycor < max-pycor - 2 - 2 * number-of-rows [ die ]
  set pcolor yellow
  set ycor ycor - 2
  hatch 1 [
    set xcor xcor - 1
    propagate
  ]
  hatch 1 [
    set xcor xcor + 1
    propagate
  ]
  die
end

'propagate'的递归调用顺序有保证吗?例如,第一个调用 (xcor - 1) 是否在第二个 (xcor + 1) 开始之前完全完成?还是初始呼叫先启动第一个,然后再启动第二个?能保证谁先完成吗?

它完全是顺序的。 NetLogo 中没有并行或并发。

是的,第一个调用将在第二个调用开始之前完全完成。

这是来自 Galton Box 模型,对吧?您可以按如下方式逐步观看递归:将模型从 "tick-based updates" 切换到 "continuous updates",将速度滑块置于慢速设置,然后按下设置按钮。你会看到一个严格的从左到右,深度优先的遍历。