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 に答える