折叠并在Elm中追加列表导致堆栈溢出

问题描述:

我正在尝试制作一个与Elm交互的图表。我最初的做法是追加一个带有信号值的状态列表,并在该列表中画一条线。但是,我无法得到这个工作,因为在foldp中追加列表会导致堆栈溢出错误(请参阅代码)。折叠并在Elm中追加列表导致堆栈溢出

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." 

它是否打算行为?有人会提出一个更好的方法来管理一个价值清单的状态吗?

这里实际上有一个类型问题。您的函数(\ 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 

有疑问时,加入类型和你通常会发现的bug。

干杯!