2

我正在尝试用 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."

这是预期的行为吗?有人会建议一种更好的方法来管理作为价值列表的状态吗?

4

1 回答 1

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

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

干杯!

于 2014-11-01T01:01:01.993 回答