2014-09-06 75 views
2

Ord`參數是否有一個共同的Haskell成語memoizing遞歸函數型memoize的功能與`在Haskell

Ord a => a -> SomeType 

我特別有型遞歸函數

(Int, Int, [Int]) -> Int 

我想要記憶。

+0

有你看了[數據memocombinators(http://hackage.haskell.org/package/data-memocombinators-0.3)或[MemoTrie] (https://hackage.haskell.org/package/MemoTrie)庫或者[Haskell wiki](http://www.haskell.org/haskellwiki/Memoization)上的記錄? – bheklilr 2014-09-06 04:04:39

+0

@bheklilr我曾看過Haskell的wiki,但是從我對wiki的瞭解很少,我不確定如何翻譯爲一般的'Ord'情況,因爲它似乎並不清楚我將如何在列表,或者如何爲一般的'Ord'類型構造trie。 – math4tots 2014-09-06 04:18:24

+1

'Ord'沒有足夠的信息來構建一個純粹的memoization樹。爲了使代碼變得純粹,數據結構必須先驗知曉,以便在發現計算結果時不需要改變內存中的懶惰結構,因爲這樣做會產生副作用。對於monadic memoization,'Ord'就足夠了;它可以讓你發現結構的計算進行,讓你建立例如一個'Map'。 – Cirdec 2014-09-06 04:40:05

回答

3

你的數據類型

(Int, Int, [Int]) 

可以被映射到Integer。第一個Int僅僅是一堆比特,並且Ints的列表僅僅是一個比特列表,一次一個一個進入。由於可以爲Integer製作記憶樹,因此可以爲此數據類型創建記憶樹。該memo-trie package同意,並提供以下3個相關的實例:

instance HasTrie Int 
instance HasTrie x => HasTrie [x] 
instance (HasTrie a, HasTrie b, HasTrie c) => HasTrie (a, b, c)