从 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