【发布时间】:2015-02-23 23:34:02
【问题描述】:
我是一名 Haskell 新手,试图解决有关不同数字的 Collatz 序列长度的问题。我希望使用 memoization 编写一个函数,但我卡住了:
-- map for memoization
collLength:: Data.Map.Map Int Int
collLength = Data.Map.fromList [(1,0)]
-- collatz n returns the length of the sequence starting in n
collatz:: Int -> Int
collatz n =
case (Data.Map.lookup n collLength) of
Just x -> x
Nothing ->
let result
| n `mod` 2 == 0 = 1 + collatz (n `div` 2)
| otherwise = 1 + collatz (3*n + 1)
in do
Data.Map.insert n result collLength
return result
我想用新计算的结果填充地图。但是,我收到以下错误:
无法将类型“Data.Map.Map Int Int”与“Int”匹配
预期类型:Data.Map.Map Int Int -> Data.Map.Map Int Int -> Int
实际类型:Data.Map.Map Int Int -> Data.Map.Map Int Int -> Data.Map.Map Int Int
从最后一块。如何插入新值,然后让 collatz 函数返回它?
【问题讨论】:
标签: haskell