Memoization Pascals Dreieck

Ich interessiere mich nicht für die eigentliche Lösung oder andere Methoden, um das Problem zu lösen, es ist die Notiz, bei der ich Hilfe brauche :)

Ich brauche Hilfe bei einem Pascal-Dreieck-Problem mit dem Auswendiglernen. Ich möchte die mittlere Zahl in die Basis des Dreiecks bekommen. (Projekt Euler 15)

Das erste Beispiel ist nicht eingeprägt (obwohl der Name dies nahelegt). "20 20" ist nicht lösbar

Der zweite Versuch ist ein Versuch, etwas Ähnliches zu tun wie:http://www.haskell.org/haskellwiki/Memoization

Der dritte ist der Vorschlag auf Nr. 2, ob dies für jemanden besser lesbar ist.

Ich bekomme diese Fehlermeldung, aber ich bin mir nicht sicher, ob es richtig ist, auch wenn es kompilieren würde ... (laufen von ghci mit 2 2 als Parameter

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)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage