如果一个 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",将速度滑块置于慢速设置,然后按下设置按钮。你会看到一个严格的从左到右,深度优先的遍历。
在模型库中,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",将速度滑块置于慢速设置,然后按下设置按钮。你会看到一个严格的从左到右,深度优先的遍历。