2014-09-06 58 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)