Netlogo根据给定的长度制作一个列表

Luk*_*chn 4 list netlogo

我想从给定长度的值中创建一个列表.

例如,给定列表[0 1]和期望的列表长度为7,输出将是[0 1 0 1 0 1 0].长度population由滑块定义,并由滑块定义.我声明了x应该遍历列表的变量.如果列表的长度短于其值,population则应0再次设置.

我用循环命令尝试了它,但它无限运行:

let x 0
  loop[
    if length exp-dif-li <= population[
      ifelse x < length exp-dif-li[
        set x 0]
      [ set exp-dif-li lput item x exp-dif-li exp-dif-li
        set x x + 1]
    ]
  ]
]
Run Code Online (Sandbox Code Playgroud)

Bry*_*ead 5

mod并且n-values是你的朋友:

to-report continue-list [ lst n ]
  report n-values n [ item (? mod length lst) lst ]
end
Run Code Online (Sandbox Code Playgroud)

示例用途:

observer> show continue-list [0 1] 7
observer: [0 1 0 1 0 1 0]
observer> show continue-list [0 1] 1
observer: [0]
observer> show continue-list [0 1 2 3 4] 22
observer: [0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1]
Run Code Online (Sandbox Code Playgroud)

编辑:意识到谈论为什么这样有用会很好!n-values n [ ... ]创建一个长度列表n发送的数字0通过 n - 1给定的记者.记者访问该号码?(这是NetLogo 任务语法).所以我们想继续重复原始列表中的项目.反复循环数字的一个非常好的功能是mod.通常,i新列表的项目应该是项目i mod <length of original list>.因此,将它们组合在一起,n-values n [ item (? mod length lst) lst ]可以根据需要n重复列表中的项目来创建新的长度列表lst.