我正在尝试与榆树制作互动图表。我最初的方法是附加一个包含信号值的状态列表,并从该列表中绘制一条线。但是,我无法解决这个问题,因为在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."
是否有意?有人会建议一个更好的方法来管理一个值列表的状态吗?
答案 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
如果有疑问,请添加类型,您通常会发现错误。
干杯!