List Netlogo为给定长度制作一个列表
我想用给定长度的列表自身的值创建一个列表 例如,给定列表List Netlogo为给定长度制作一个列表,list,netlogo,List,Netlogo,我想用给定长度的列表自身的值创建一个列表 例如,给定列表[01]和所需的列表长度7,输出将是[01 01 01 0]。长度由填充定义,并由滑块定义。我声明了应该遍历列表的变量x。如果列表的长度小于总体的值,则应再次将其设置为0 我用循环命令尝试了它,但它运行无限: let x 0 loop[ if length exp-dif-li <= population[ ifelse x < length exp-dif-li[ set x 0]
[01]
和所需的列表长度7,输出将是[01 01 01 0]
。长度由填充定义,并由滑块定义。我声明了应该遍历列表的变量x
。如果列表的长度小于总体
的值,则应再次将其设置为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]
]
]
]
设x0
环路[
如果长度exp dif li和您是这里的朋友:
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[…]
通过n-1
将数字0
发送给给定的报告者,创建一个长度n
的列表。报告者使用?
访问数字(这是NetLogo语法)。因此,我们希望继续重复原始列表中的项目。重复循环数字的一个非常好的函数是mod
。一般来说,新列表中的项目i
应该是项目i mod
。因此,把它们放在一起,n值n[item(?.mod length lst)lst]
根据需要重复列表lst
中的项目,创建长度n
的新列表。要摆脱循环,需要调用end或stop
插入行
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]
]
而长度exp dif li<7
[
如果有人希望列表随机化,那么可以在report和n值之间使用shuffle命令
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]
]