从netlogo中的重复循环中打印变量的所有值

时间:2016-04-28 11:26:32

标签: loops netlogo repeat

如果这是一个愚蠢的问题,我真的很抱歉,但我对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在循环中的所有值?

我真的很抱歉

2 个答案:

答案 0 :(得分:3)

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

如果您不想要,可以随时删除初始项目。

答案 1 :(得分:1)

如果您只想计算fib序列并获取列表中的数字,您可能需要考虑这一点。我想请注意,你的x列表和y列表是fib序列的子集。它是Alan提到的递归情况的替代方案,它比重复语句更清晰:

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