foldp并在Elm中附加一个列表会导致堆栈溢出

时间:2014-11-01 00:25:21

标签: elm

我正在尝试与榆树制作互动图表。我最初的方法是附加一个包含信号值的状态列表,并从该列表中绘制一条线。但是,我无法解决这个问题,因为在foldp中附加一个列表会给出堆栈溢出错误(请参阅代码)。

import Random
sig = Random.range 0 100 (every second)
rollLs = foldp (\os s -> os ++ [s]) [] sig 

main = lift asText rollLs

"Stack space overflow: current size 8388608 bytes."

是否有意?有人会建议一个更好的方法来管理一个值列表的状态吗?

1 个答案:

答案 0 :(得分:2)

这里确实有类型问题。您的函数(\ os s - > os ++ [s])无法计算,实际上编译器正在获得堆栈溢出(而不是代码的运行)。

这是一个版本,可以执行您尝试使用相应类型注释执行的操作:

import Random

sig : Signal Int
sig = Random.range 0 100 (every second)

update : Int -> [Int] -> [Int]
update s os = os ++ [s]

--foldp : (a -> b -> b) -> b -> Signal a -> Signal b

rollLs : Signal [Int]
rollLs = foldp update [] sig 

main = lift asText rollLs

如果有疑问,请添加类型,您通常会发现错误。

干杯!