【问题标题】:printing all the values of a variable from a repeat loop in netlogo从 netlogo 中的重复循环打印变量的所有值
【发布时间】:2016-04-28 11:26:31
【问题描述】:

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

真的很抱歉

【问题讨论】:

    标签: loops netlogo repeat


    【解决方案1】:
    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
    

    如果您不想要初始项目,您可以随时丢弃它们。

    【讨论】:

    • fun-fibcf extension(现在与 NetLogo 5.3.1 捆绑在一起)看起来不错... :-)
    【解决方案2】:

    如果您只想计算 fib 序列并获取列表中的数字,您可能需要考虑这一点。我想指出,您的 xs 列表和 ys 列表是 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
    

    【讨论】:

    • 1. ifelse-value 可以剪裁,2。这清楚地表明 t 真的不是缩减。
    • 好电话。谢谢! =D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2021-05-21
    • 2021-02-16
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多