Netlogo嵌套循环

时间:2013-11-28 20:19:33

标签: netlogo

基本上,我的问题是嵌套循环如何在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循环来使用可变大小的世界。

1 个答案:

答案 0 :(得分:8)

起初,我不确定你的意思是“netlogo中的循环工作类似于汇编语言中的标签,所以它会跳到第一个标签时注意到它”,但我现在怀疑你是指的事实上,如果你在NetLogo中嵌套了两个loop构造,最终使用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 in 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循环。