Netlogo 为给定的长度制作一个列表
Netlogo making a list out of itself for a given length
我想根据给定长度的自己的值创建一个列表。
例如,给定列表 [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]
]
]
]
to-report continue-list [ lst n ]
report n-values n [ item (? mod length lst) lst ]
end
示例使用:
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]
编辑:意识到讨论为什么这有效会很好! n-values n [ ... ]
通过将数字 0
到 n - 1
发送给给定的报告者来创建长度为 n
的列表。记者使用 ?
访问号码(这是 NetLogo task 语法)。所以我们要不断重复原始列表中的项目。重复循环数字的一个非常好的函数是 mod
。一般来说,新列表的i
项应该是i mod <length of original list>
项。因此,将它们放在一起,n-values n [ item (? mod length lst) lst ]
通过根据需要重复列表 lst
中的项目来创建一个长度为 n
的新列表。
要退出循环,您需要调用结束或停止。
插入行
if length exp-dif-li = 7 [stop]
正确的地方会做。循环很容易变成无限循环和冻结,所以最好避免。
我更喜欢 while 循环。它们更安全,更不容易出现像这样的无限循环
while length exp-dif-li < 7
[
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]
]
Netlogo 有另一种我在其他地方没有见过的方法,它对无限循环非常有效。 [重复] 你的用法似乎是
repeat 7 [
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]
]
我想根据给定长度的自己的值创建一个列表。
例如,给定列表 [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]
]
]
]
to-report continue-list [ lst n ]
report n-values n [ item (? mod length lst) lst ]
end
示例使用:
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]
编辑:意识到讨论为什么这有效会很好! n-values n [ ... ]
通过将数字 0
到 n - 1
发送给给定的报告者来创建长度为 n
的列表。记者使用 ?
访问号码(这是 NetLogo task 语法)。所以我们要不断重复原始列表中的项目。重复循环数字的一个非常好的函数是 mod
。一般来说,新列表的i
项应该是i mod <length of original list>
项。因此,将它们放在一起,n-values n [ item (? mod length lst) lst ]
通过根据需要重复列表 lst
中的项目来创建一个长度为 n
的新列表。
要退出循环,您需要调用结束或停止。
插入行
if length exp-dif-li = 7 [stop]
正确的地方会做。循环很容易变成无限循环和冻结,所以最好避免。
我更喜欢 while 循环。它们更安全,更不容易出现像这样的无限循环
while length exp-dif-li < 7
[
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]
]
Netlogo 有另一种我在其他地方没有见过的方法,它对无限循环非常有效。 [重复] 你的用法似乎是
repeat 7 [
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]
]