使用reduce将NetLogo中的列表相乘

时间:2014-11-21 02:04:01

标签: netlogo reduce

我试图调试我的NetLogo代码, 我想根据邻居的概率创建一个列表,然后使用' reduce'将列表中的所有这些值相乘。据我所知,除非它正在运行,否则它会产生如下运行时错误。

我也试过使用'让P减少[?1 *?2]问题列表'但它也会出现同样的错误。

注意Prob_water_water_breaking,Prob_solute_solute_breaking被定义为'全局'然后在设置中将它们分配给特定品种。

to-report all-probabilities  
    let prob-list (list ([Prob_water_water_breaking ] of turtles-on neighbors4) 
      ([Prob_solute_solute_breaking ] of turtles-on neighbors4)
     let P reduce  *  prob-list ;;this is the line that's causing the error
     report P
  end

这是短暂时间错误:

* expected input to be a number but got the list [0.3 0.3 0.3] instead.
error while solute 2 running *
  called by procedure ALL-PROBABILITIES
  called by procedure GO
  called by Button 'go'

非常感谢任何帮助,非常感谢!

1 个答案:

答案 0 :(得分:2)

啊!我喜欢涉及reduce的问题。但在你的情况下,问题出在以下几行:

let prob-list (list ([Prob_water_water_breaking ] of turtles-on neighbors4) 
      ([Prob_solute_solute_breaking ] of turtles-on neighbors4)

您(和reduce)期待一个数字列表,但prob-list实际上是数字列表:每次调用of生成一个列表,这些列表中的每一个都成为您使用list创建的列表中的项目。

由于您希望将列表连接在一起,因此可以使用sentence代替list

let prob-list (sentence ([Prob_water_water_breaking ] of turtles-on neighbors4) 
      ([Prob_solute_solute_breaking ] of turtles-on neighbors4))

另一种(可能更好)避免问题的方法是在of内执行第一次乘法:

let prob-list [ Prob_water_water_breaking * Prob_solute_solute_breaking ]
  of turtles-on neighbors4