从 netlogo 中的重复循环打印变量的所有值
printing all the values of a variable from a repeat loop in netlogo
如果这是一个愚蠢的问题,我真的很抱歉,但我是 netlogo 的新手,我在其他地方找到的建议似乎并不适用于我的情况;问题是:
如何在 netlogo 中存储和打印来自重复循环的变量的所有值?
let x 1
let y 1
let i n - 2
repeat i [let z (x + y) set x y set y z ]
let list1 (list x y)
print list1`
此代码现在生成并打印一个仅包含 x 和 y 的最后两个值的列表 - 我怎样才能让它保存并打印循环中 x 和 y 的所有值?
再次感到抱歉
to test-fib [#n]
let x 1
let y 1
let xs (list x)
let ys (list y)
let i (#n - 2)
repeat i [
let z (x + y)
set x y
set y z
set xs lput x xs
set ys lput y ys
]
print xs
print ys
end
但最好还是使用记者。假设您至少需要两项:
to-report better-fib [#n]
let x_2 0
let x_1 1
let fibs (list x_2 x_1)
repeat (#n - 2) [
let x (x_2 + x_1)
set fibs (lput x fibs)
set x_2 x_1
set x_1 x
]
report fibs
end
使用一点递归可能会很有趣:
to-report fun-fib [#n]
if (#n = 0) [report []]
if (#n = 1) [report [0]]
if (#n = 2) [report [0 1]]
let f1 (fun-fib (#n - 1))
let x_1 last f1
let x_2 last butlast f1
report lput (x_2 + x_1) f1
end
如果您不想要初始项目,您可以随时删除它们。
如果你只是想计算 fib 序列并获得列表中的数字,你可能需要考虑这个。我想指出,您的 xs 列表和 ys 列表是 fib sequence.It 的子集,它是 Alan 提到的递归案例的替代方法,它比 repeat 语句更简洁:
to-report fib [n]
if n < 2 [ report n-values (n + 1) [?]] ;; consider base case
report reduce [sentence ?1 ((last ?1) + (last (but-last ?1))) ] (fput (list 0 1) (n-values (n - 1) [?]))
end
如果这是一个愚蠢的问题,我真的很抱歉,但我是 netlogo 的新手,我在其他地方找到的建议似乎并不适用于我的情况;问题是:
如何在 netlogo 中存储和打印来自重复循环的变量的所有值?
let x 1
let y 1
let i n - 2
repeat i [let z (x + y) set x y set y z ]
let list1 (list x y)
print list1`
此代码现在生成并打印一个仅包含 x 和 y 的最后两个值的列表 - 我怎样才能让它保存并打印循环中 x 和 y 的所有值?
再次感到抱歉
to test-fib [#n]
let x 1
let y 1
let xs (list x)
let ys (list y)
let i (#n - 2)
repeat i [
let z (x + y)
set x y
set y z
set xs lput x xs
set ys lput y ys
]
print xs
print ys
end
但最好还是使用记者。假设您至少需要两项:
to-report better-fib [#n]
let x_2 0
let x_1 1
let fibs (list x_2 x_1)
repeat (#n - 2) [
let x (x_2 + x_1)
set fibs (lput x fibs)
set x_2 x_1
set x_1 x
]
report fibs
end
使用一点递归可能会很有趣:
to-report fun-fib [#n]
if (#n = 0) [report []]
if (#n = 1) [report [0]]
if (#n = 2) [report [0 1]]
let f1 (fun-fib (#n - 1))
let x_1 last f1
let x_2 last butlast f1
report lput (x_2 + x_1) f1
end
如果您不想要初始项目,您可以随时删除它们。
如果你只是想计算 fib 序列并获得列表中的数字,你可能需要考虑这个。我想指出,您的 xs 列表和 ys 列表是 fib sequence.It 的子集,它是 Alan 提到的递归案例的替代方法,它比 repeat 语句更简洁:
to-report fib [n]
if n < 2 [ report n-values (n + 1) [?]] ;; consider base case
report reduce [sentence ?1 ((last ?1) + (last (but-last ?1))) ] (fput (list 0 1) (n-values (n - 1) [?]))
end