私は実際の解決策や問題を解決する他の方法には興味がありません。それは私が助けを必要としているメモ化です:)
メモ化でパスカルの三角形の問題を解決するのに助けが必要です。三角形の底辺の真ん中の数字を取得したいです。(Project Euler 15)
最初の例はメモ化されていません (名前はそう示唆していますが) "20 20" は解決できません
2 番目の試みは、次のような試みです: http://www.haskell.org/haskellwiki/Memoization
3 番目は、no2 に関する hlints の提案です。
私はこのエラーを受け取りますが、それがコンパイルされても正しいかどうかはわかりません... (2 2 をパラメーターとして ghci から実行します)
no instance for (Num [a0])
arising from a use of `zmemopascals'
Possible fix: add an instance declaration for (Num [a0])
In the expression: zmemopascals 2 2
In an equation for `it': it = zmemopascals 2 2
.
Code:
--1
memopascals r c = [[pascals a b | b<-[1..c]] | a<-[1..r]] !! (r-1) !! (c-1)
where pascals 1 _ = 1
pascals _ 1 = 1
pascals x y = memopascals (x-1) y + memopascals x (y-1)
--2
--xmemopascals :: Int -> Int -> Int
xmemopascals r c = map (uncurry pascals) (zip [1..] [1..]) !! (r-1) !! (c-1)
where pascals 1 _ = 1
pascals _ 1 = 1
pascals x y = memopascals (x-1) y + memopascals x (y-1)
--3
zmemopascals r c = zipWith pascals [1 ..] [1 ..] !! (r-1) !! (c-1)
where pascals 1 _ = 1
pascals _ 1 = 1
pascals x y = memopascals (x-1) y + memopascals x (y-1)