基本上,我的问题是嵌套循环如何在netlogo中工作.我已经尝试在彼此之间嵌套两个while循环,但是内部循环似乎没有正常运行(正确地是它们在其他语言中的工作方式).如果我使用两个不同的循环,它按预期工作.netlogo中的循环工作类似于汇编语言中的标签,因此它会跳转到第一个标记时注意到它.
我问的原因是因为我一直在尝试使用不同类型的循环,或者为内循环创建一个过程,这会损害我的代码的可读性.这是一个例子,我在一个制表符分隔文件中读取为补丁分配值:
file-open "map2.txt" let i max-pycor let j min-pxcor while [i >= min-pycor] [ repeat 33 [ask patch j i [ ifelse file-read = 1 [set pcolor white] [set pcolor black] ] set j j + 1 ] set i i - 1 ] file-close-all
我想删除重复33循环并使用while循环来使用可变大小的世界.
起初,我不确定你的意思是"在netlogo中的循环工作类似于汇编语言中的标签,所以它会跳到第一个标签时注意到它",但我现在怀疑你指的是这个事实如果你loop
在NetLogo中嵌套两个构造,最终会使用stop
你的外部循环,这肯定不是你所期望的.
展示:
to test-loop let i 0 loop [ set i i + 1 type (word "i" i " ") let j 0 loop [ set j j + 1 type (word "j" j " ") if j = 3 [ stop ] ] if i = 3 [ stop ] ] end
会在指挥中心给你这个:
observer> test-loop i1 j1 j2 j3
我明白为什么这可能是一个问题.但是,while
在NetLogo中,行为与您期望的一样:
to test-while let i 0 while [ i <= 3 ] [ set i i + 1 type (word "i" i " ") let j 0 while [ j <= 3 ] [ set j j + 1 type (word "j" j " ") ] ] end
在指挥中心:
observer> test-while i1 j1 j2 j3 j4 i2 j1 j2 j3 j4 i3 j1 j2 j3 j4 i4 j1 j2 j3 j4
...所以我不明白为什么你不能使用两个嵌套while
循环.