2014-11-01 44 views
2

我正在嘗試製作一個與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." 

它是否打算行爲?有人會提出一個更好的方法來管理一個價值清單的狀態嗎?

回答

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 

有疑問時,加入類型和你通常會發現的bug。

乾杯!