
You're right, i didn't compile with -fwarn-incomplete-patterns and it bite me. You may also write g as [] = map (\_ -> 0) as or some combination of take length and repeat. g as [] = take (length as) (repeat 0) I'm sorry to have posted incomplete and uncommented code, I should think twice next time. On Wed, 2010-09-15 at 01:43 -0700, Greg wrote:
I think you also need to handle the case where the second parameter to g is empty (where list_A has non-matching elements after list_B is exhausted).
g (a:as) [] = 0 : g as []
or something similar in between the two existing definitions?
On Sep 15, 2010, at 1:34 AM, jean verdier wrote:
list_A = [0,10,20,30,40,50] list_B = [0,10,50] list_C = [2,1,-5]
f a b c = g a (zip b c)
g [] _ = [] g (a:as) xs@((b,c):xs') | a > b = error "b is not a subset of a" | a == b = c : g as xs' | a < b = 0 : g as xs
main = do print (f list_A list_B list_C)
On Wed, 2010-09-15 at 09:28 +0200, Lorenzo Isella wrote:
Hi Antoine, Unfortunately these are really truly lists and not sets (for instance, the ordering of elements matter and some of them may be repeated).
Lorenzo
On 09/15/2010 01:55 AM, Antoine Latter wrote:
Are these truly lists, or would you be better suited using Sets, Maps or IntMaps?
Then you can use some of the unionWith functions to decide what to insert, or you can simply wrap the looking functions to return zero on failure.
Antoine
On Sep 14, 2010 6:35 PM, "Lorenzo Isella"
mailto:lorenzo.isella@gmail.com> wrote: Dear All, I still have to find my way with immutable lists and list comprehension. Consider the following lists
A=[0,10,20,30,40,50] B=[0,10,50] (i.e. B is a subset of list A; list A is already ordered in increasing order and so is B). C=[2,1,-5] i.e. there is a corresponding element in C for every element in B.
Now, I would like to define a new list D having length equal to the length of A. The elements of D in the position of the elements of A in common with B are equal to the corresponding entries in C, whereas the other ones are zero i.e. D=[2,1,0,0,0,-5]. How can I achieve that? The first thought that comes to my mind is to define a list of zeros which I would modify according to my needs, but that is not allowed... Many thanks
Lorenzo _______________________________________________ Beginners mailing list Beginners@haskell.org mailto:Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners