As a newbie, I'm studying the pdf 'the Haskell road to logic, math and programming' and I'm stuck with one exercise. I want to extract x if x is at the beginning of a list. I thought to use something like this: extractIfBegins x [xs] | [xs] == (x:ys) = [ys] | otherwise = [xs] But ghci complains that ys is not defined. Without giving the answer, can someone give a hint about the approach to follow ? -- Fabien
Hi Fabien, On Sat, 26 Dec 2015 15:19:17 +0100 Fabien R <theedge456@free.fr> wrote:
extractIfBegins x [xs] | [xs] == (x:ys) = [ys] | otherwise = [xs]
But ghci complains that ys is not defined.
That is because you cannot pattern match whilst equality testing. The statement xs == (x:ys) is problematic therefore. You expect the compiler to see "oh, I don't know ys, but xs is a list, so I'm just checking x and put the rest into ys while I'm at it".
Without giving the answer, can someone give a hint about the approach to follow ?
Try pattern matching on the list xs instead. Also take care that it's xs, not [xs] (the latter notation implies a list with one element xs). Best, Max
On 26/12/15 15:46, Max Voit wrote:
That is because you cannot pattern match whilst equality testing. The statement xs == (x:ys) is problematic therefore. You expect the compiler to see "oh, I don't know ys, but xs is a list, so I'm just checking x and put the rest into ys while I'm at it". Thanks Max, It's more clear now.
-- Fabien
It sounds like you want to include x only if it is not already at the head of the list. Try this: extractIfBegins x (y:ys) | x == y = ys | otherwise = x:ys On Sat, Dec 26, 2015 at 9:19 AM, Fabien R <theedge456@free.fr> wrote:
As a newbie, I'm studying the pdf 'the Haskell road to logic, math and programming' and I'm stuck with one exercise. I want to extract x if x is at the beginning of a list. I thought to use something like this: extractIfBegins x [xs] | [xs] == (x:ys) = [ys] | otherwise = [xs]
But ghci complains that ys is not defined. Without giving the answer, can someone give a hint about the approach to follow ?
-- Fabien _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (3)
-
David McBride -
Fabien R -
Max Voit