折叠并在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。
干杯!