
Hello everyone, I have just started studying and started trying to solve 99 questions in haskell.org. However I got stuck even in the first question. The first question wants me to write my own last function and I wrote this : q1mylast :: [x] -> x q1mylast [a] = if length [a] <=1 then a else q1mylast (tail [a]) This program doesn't work and it gives this error : Program error: pattern match failure: q1mylast "doaltan" I'll be very glad if you could tell me what's wrong with the code and how can I fix it.. Thanks in advance :)

[a] when used as an argument doesn't mean what you think it does. It
means a list with only one element a. So your function will only
match one single case, a list such as [3], or a string with one
character "a".
Here are all the things you could match on:
xs -> just a variable which will contain the whole list
[] -> an empty list
[a] -> a list with one element in it, which you can reference via a
[a,b,c] -> a list with exactly three elements in it, which can all be referenced
(x:xs) -> a list with at least one element, of which x is that
element, and xs is the rest of the list
(x:[]) -> a list with one element, followed by nothing else.
Essentially the same as [x].
(x:y:xs) -> a list with two elements, xs has the rest of the list.
Remember that xs could be empty.
So think about the problem. If someone passes in a list, it either
has one element, or it has more than one and we want to get to the
last one
last :: [x] -> x
last [x] = x
Well that deals with the easy case. One element, one answer. But if
there is more than one element, then what?
last (_:xs) = last xs
Just discard the first one and run the function again on what remains.
On Sat, Feb 18, 2012 at 1:18 PM, bahadýr altan
Hello everyone, I have just started studying and started trying to solve 99 questions in haskell.org. However I got stuck even in the first question. The first question wants me to write my own last function and I wrote this :
q1mylast :: [x] -> x q1mylast [a] = if length [a] <=1 then a else q1mylast (tail [a])
This program doesn't work and it gives this error :
Program error: pattern match failure: q1mylast "doaltan"
I'll be very glad if you could tell me what's wrong with the code and how can I fix it.. Thanks in advance :)
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
bahadýr altan
-
David McBride