我试图调试我的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'
非常感谢任何帮助,非常感谢!
答案 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