Hello!
I will call plusplus' by pp' in the text below
1. Your pp' gives a warning, namely that the patternspp' [] xs = xspp' [] [] = []are overlapping. This is because of pattern matching working top-down ie if I give the input pp' [] [] it will match both your function entry points at pp' [] xs and pp' [] []. We don't really need pp' [] [] as pp' [] ys = ys will give the correct answer even if ys is an empty list.
2. In your last function body you have this expressionpp' (x:xs) ys = pp' xs (x:ys)
this will not do what you expect, consider the flow below.
I will call pp' on two strings "ABC" and "DEF"
Lets extend this functionpp' (A:BC) DEF = pp' BC (A:DEF)pp' (B:C) ADEF = pp' C (B:ADEF)pp' C:[] BADEF = pp' [] (C:BADEF)pp' [] CBADEF = CBADEF -- <- base case
As you see, it will pick the first of xs to put first on ys but is this what we want? For one recursion, yes but after that it gets a bit weird. The second recursion will flip the order of the resulting list by adding the first object at the start first, instead of last.
We actually don't want our construction (the colon :) to work from inside the recursive call (pp' xs (x:ys)), we want to move it outside, like this, and just like we did in init: pp' (x:xs) ys = x: pp' xs ys
2015-05-12 20:33 GMT+02:00 Roelof Wobben <r.wobben@home.nl>:
pfff, I got grazy here
On this function it works fine :
-- | The main entry point.
init' :: [a] -> Maybe [a]
init' [] = Nothing
init' [x] = Just []
init' (x:xs) = Just (x:fromMaybe xs (init' xs))
main = print . init' $ [1,3]
and on this one it does not work :
plusplus' :: [a] -> [a] -> [a]
plusplus' [] (xs) = xs
plusplus' [] [] = []
plusplus' (xs) [] = xs
plusplus' (x:xs) yx = plusplus' xs (x:yx)
main = print . plusplus' $ [1,2] [3, 4]
Roelof
Alex Hammel schreef op 12-5-2015 om 20:19:
The relevant part of that error message is this:Which means that you're trying to call a list literal as though it were a function (with one argument). Which probably means that you've got a ($) out of place.
> The function ‘[1, 2]’ is applied to one argument, but its type> [t0]
> has none
On Tue, 12 May 2015 at 11:16 Roelof Wobben <r.wobben@home.nl> wrote:
Thanks,
Now I see the last error on the main line :
src/Main.hs@7:28-7:39Couldn't match expected type ‘[t1] -> [a0]’ with actual type[t0]The function ‘[1, 2]’ is applied to one argument, but its type[t0]has none … In the second argument of ‘($)’, namely ‘[1, 2] [3, 4]’ In the expression: print . plusplus' $ [1, 2] [3, 4]
Roelof
Alex Hammel schreef op 12-5-2015 om 20:11:
_______________________________________________You're missing the parens around (x:yx) in the last clause.
On Tue, 12 May 2015 at 11:02 Roelof Wobben <r.wobben@home.nl> wrote:
Hello,_______________________________________________
I try to re implement ++
So far I have this ;
plusplus' :: [a] -> [a] -> [a]
plusplus' [] (xs) = xs
plusplus' [] [] = []
plusplus' (xs) [] = xs
plusplus' (x:xs) yx = plusplus' xs x:yx
main = print . plusplus' $ [1,2] [3,4]
But I still get this error message :
src/Main.hs@5:23-5:37Couldn't match expected typeawith actual type[a]ais a rigid type variable bound by the type signature for plusplus' :: [a] -> [a] -> [a] at /home/app/isolation-runner-work/projects/112825/session.207/src/src/Main.hs:1:14 Relevant bindings include yx :: [a] (bound at /home/app/isolation-runner-work/projects/112825/session.207/src/src/Main.hs:5:18) xs :: [a] (bound at /home/app/isolation-runner-work/projects/112825/session.207/src/src/Main.hs:5:14) x :: a (bound at /home/app/isolation-runner-work/projects/112825/session.207/src/src/Main.hs:5:12) plusplus' :: [a] -> [a] -> [a] (bound at /home/app/isolation-runner-work/projects/112825/session.207/src/src/Main.hs:2:1) …
![]()
Dit e-mailbericht is gecontroleerd op virussen met Avast antivirussoftware.
www.avast.com
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
![]()
Dit e-mailbericht is gecontroleerd op virussen met Avast antivirussoftware.
www.avast.com
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
![]()
Dit e-mailbericht is gecontroleerd op virussen met Avast antivirussoftware.
www.avast.com
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
--
Jonathan Skårstedt
Bergsgårdsgärdet 39
Lgh 1108
424 32 Göteborg
Mobil: 073 - 76 20 20 7
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
![]() |
Dit e-mailbericht is gecontroleerd op virussen met Avast antivirussoftware.
|