Netlogo嵌套循环

Netlogo嵌套循环,netlogo,Netlogo,基本上,我的问题是嵌套循环如何在netlogo中工作。我尝试过在彼此之间嵌套两个while循环,但内部的一个似乎没有正常工作(与其他语言中的工作方式相同)。但是,如果我使用两个不同的循环,它将按预期工作。netlogo中的循环工作方式与汇编语言中的标签类似,以便在标记时跳转到第一个循环 我问这个问题的原因是因为我一直在互相使用不同类型的循环,或者为内部循环创建一个过程,这会损害代码的可读性。下面是一个示例,我正在读取一个以制表符分隔的文件,以便为修补程序分配值: file-open "map2.

基本上,我的问题是嵌套循环如何在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

我想删除repeat 33循环,并有一个while循环用于不同大小的世界。

首先,我不确定您所说的“netlogo中的循环是否与汇编语言中的标签类似,以便它在注意到标签时跳转到第一个”,但我现在怀疑您指的是这样一个事实:如果在NetLogo中嵌套两个结构,则最终使用的将使您脱离外部循环,这显然不是您所期望的

证明:

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 
observer> test-while
i1 j1 j2 j3 j4 i2 j1 j2 j3 j4 i3 j1 j2 j3 j4 i4 j1 j2 j3 j4
我明白为什么这会成为一个问题,但是,其行为与您预期的一样:

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

…因此,我不明白为什么不能在
循环时使用两个嵌套的

一般来说,您应该发布给您带来问题的代码,而不是如何解决它。这会让你更容易找出哪里出了问题……还有:你知道,对吧?这本可以用来代替你的代码中的
33
。@NicolasPayette不知道世界宽度,我现在可以从这么多地方删除max-pycor-min-pycor。多谢!谢谢,一定是有一个不同的问题让我不断地退出内部循环,因为这发生在不止一个地方。我需要更好地跟踪我的循环检查!