# [Haskell-beginners] A simple function V2

Fri Aug 31 14:16:06 CEST 2012

```my mistake, that's not right.

But you should try to use use something like this:

intercalate :: (Eq t) => [t] -> [t] -> [t]
intercalate _ [] = []
intercalate [] _ = []
intercalate (x:xs) (y:ys) = x : y : intercalate xs ys

with the last line, you imply that your lists have at least one element
(through pattern matching). By the recursive call, you will enter this
'non-exhaustive' case.

*intercalate (x:xs) (y:ys)*
>> * | xt == [] = []*
>> * | yt == [] = []*
>> * | otherwise = x : y : intercalate xs ys*
* where xt=(x:xs)*
>> *            yt=(y:ys)*

for defining xt and yt, you could write:

intercalate xt@(x:xs) yt@(y:ys)

greets

On 08/31/2012 02:06 PM, Gary Klindt wrote:
> Hi,
>
> you don't proof for empty lists, only for empty tails: (x:[])
>
>
> On 08/31/2012 02:01 PM, Ezequiel Hernan Di Giorgi wrote:
>> First i want to thank all the persons who responded me yesterday to help
>> me. Thanks! I am so happy with with your friendliness.
>> So i have other beginners question:
>>
>> Now i want a improved version of my* intercalate*. Now i want to call a
>> function with two [t][t] and obtain another one which have only
>> even elements, even because:
>>
>>     - [1,2,3,3,4][6] and the ouput [1,6]
>>     - [1,2,3,4][5,6,7] output [1,5,2,6,3,7]
>>
>> I tried it:
>>
>> *intercalate :: (Eq t) => [t] -> [t] -> [t]*
>> *intercalate (x:xs) (y:ys)*
>> * | xt == [] = []*
>> * | yt == [] = []*
>> * | otherwise = x : y : intercalate xs ys*
>> * where xt=(x:xs)*
>> *            yt=(y:ys)*
>>
>> but i get nice error
>>
>> **Main> intercalate [1][6]*
>> *[1,6*** Exception: baby.hs:(2,1)-(5,51): Non-exhaustive patterns in
>> function intercalate*
>> *
>> *
>> **Main> *
>>
>> (yes...the file's name is baby.hs)
>>
>> Thanks in advance! (: (: (:
>> (: (:
>>
>>
>>
>> _______________________________________________
>> Beginners mailing list