Hoihoi
Ik ben wat fijn aan het coden:
Hier gaat een lijst van getallen in, die ik wil splitsen in lijsten. Deze functie werkt goed (behalve dat ik er vanuit ging dat de head van de lijst ook het hoogste getal is).
Lijst-splitsen gaat prima:
Werkt prima, echter als ik de aanroep van head weghaal:
Waarom gaat krijgt die lambda functie nu een int ipv een [int] voor zijn kiezen? Ik snap niet wat de aanroep op head (op het resultaat van de lambda wordt uitgevoerd) hierop voor invloed heeft.
Kan iemand me een beetje de goede kant op helpen?
Overige deel van de code trouwens:
Ik ben wat fijn aan het coden:
code:
1
2
| haalMaxPalindrome :: [Int] -> [Int] haalMaxPalindrome l = head (filter (\x -> reverse x == x) (map (splitsGetal [])l )) |
Hier gaat een lijst van getallen in, die ik wil splitsen in lijsten. Deze functie werkt goed (behalve dat ik er vanuit ging dat de head van de lijst ook het hoogste getal is).
Lijst-splitsen gaat prima:
code:
1
2
| splitsGetal :: [Int] -> Int -> [Int] splitsGetal l n = if n <10 then l++[n] else splitsGetal (l++[n `mod`10]) (n `div` 10) |
Werkt prima, echter als ik de aanroep van head weghaal:
code:
1
2
| haalMaxPalindrome :: [Int] -> [Int] haalMaxPalindrome l =filter (\x -> reverse x == x) (map (splitsGetal[]) l ) |
code:
1
2
3
4
5
| euler4.hs:26:43: Couldn't match expected type `[a]' against inferred type `Int' In the first argument of `reverse', namely `x' In the first argument of `(==)', namely `reverse x' In the expression: reverse x == x |
Waarom gaat krijgt die lambda functie nu een int ipv een [int] voor zijn kiezen? Ik snap niet wat de aanroep op head (op het resultaat van de lambda wordt uitgevoerd) hierop voor invloed heeft.
Kan iemand me een beetje de goede kant op helpen?
Overige deel van de code trouwens:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| module Main where main::IO() main = do let n = [1..100] in let m = [1..100] in let factorMatrix =reverse( (\x -> foldl (++) [] x) (map (multList n) m)) in print $(haalMaxPalindrome factorMatrix ) -- vermenigvuldigt x met alle elementen in de lijst multList :: [Int] -> Int -> [Int] multList l n = map (n*) l -- splits 123 in [1,2,3] etc splitsGetal :: [Int] -> Int -> [Int] splitsGetal l n = if n <10 then l++[n] else splitsGetal (l++[n `mod`10]) (n `div` 10) -- splits 123 in [1,2,3] etc -- splitsGetal :: [Int] -> Int -> [Int] -- splitsGetal l n = if n <10 thenm Splits alle* factoren die aangeleverd worden op in lijsten zodat de palindroom functie werkt -- Filter op palindromische lijsten -- haal de het eerste element uit de lijst -- *= en dat alles met lazy evaluation ;-) haalMaxPalindrome :: [Int] -> [Int] haalMaxPalindrome l =filter (\x -> reverse x == x) (map (splitsGetal[]) l ) |
offtopic:
Ja niet de meest efficiente oplossing
Ja niet de meest efficiente oplossing