3
我現在正在運行多個類似的模式,這種模式很容易出錯(拼寫錯誤可能會跳過一些緩存),並且對我看起來並不好。有沒有更好的方式來寫這樣的東西?緩存結果的更好模式
sum_with_cache' result cache ((p1,p2,p3,p4):partitions) = let
(cache_p1, sol1) = count_noncrossing' cache p1
(cache_p2, sol2) = count_noncrossing' cache_p1 p2
(cache_p3, sol3) = count_noncrossing' cache_p2 p3
(cache_p4, sol4) = count_noncrossing' cache_p3 p4
in sum_with_cache' (result+(sol1*sol2*sol3*sol4)) cache_p4 partitions
那麼基本上N個可以更新緩存的操作呢?
我也寫的是這樣的:
process_with_cache' res cache _ [] = (cache, res)
process_with_cache' res cache f (x:xs) =
let (new_cache, r) = f cache x
in process_with_cache' (r:res) new_cache f xs
process_with_cache = process_with_cache' []
但看起來不很乾淨要麼。有沒有更好的方式來編寫這段代碼?
如果你想在函數調用之間保持一個隱式狀態,看看'Control.Monad.State'。 – Koterpillar 2013-03-17 02:13:37
你想製作備忘錄表嗎? http://www.haskell.org/haskellwiki/Memoization – 2013-03-17 11:29:41