Ich habe diesen Code seit fast 2 Stunden, und ich bekomme immer die gleiche Compiler-Fehlermeldung. Ich habe meine Forschung getan, aber kann nur keine Antwort findenListe der Listen in der Typdeklaration in Haskell
buildTable :: Int -> Int -> (Int -> Int -> a) -> [[a]]
buildTable n m fun = [[ fun x y
| x <- [0..n-1]]
| y <- [0..m-1]]
lookupAns :: Int -> Int -> [[Int]] -> Int
lookupAns len1 len2 theArray =
theArray !! len1 !! len2
lcsLength :: String -> String -> Int
lcsLength s1 s2 =
let
n1 = (length s1)
n2 = (length s2)
table = buildTable (n1 n2 lcsHelp)
lcsHelp = if (n1 == 0 || n2 == 0)
then 0
else if (last s1 == last s2)
then
(lookupAns
(n1 - 1)
n2
table)
+ 1
else
max
(lookupAns
n1
(n2-1)
table)
(lookupAns
(n1-1)
n2
table)
in lookupAns
(length s1)
(length s2)
table
Jetzt bekomme ich die gleiche Fehlermeldung, egal was ich versuche. Die Fehlermeldung lautet "Konnte nicht dem erwarteten Typ entsprechen [[Int]] -> Int 'mit dem tatsächlichen Typ [Int]" Mit anderen Spezifikationen, die auf den ersten Aufruf von max gegen Ende des Codes zeigen. Bitte helfen Sie, das ist wirklich frustrierend
Es kompiliert jetzt und läuft mit meinem neuen Code. Ich werde sicher sein, es später zu posten, da es etwas spät wird, und ich werde das für die Nacht hinstellen.
Beachten Sie, dass Listen sind nicht sehr gut für diese Art von Sache, da sie einen großen Overhead in Bezug auf den Platz und eine langsame _O (n) _ Indizierung haben. Sie sind in Ordnung für kleine Fälle oder Prototyping, aber für etwas ernstes sollten Sie wahrscheinlich in die Verwendung von Arrays oder Vektoren stattdessen suchen. – hammar