[Haskell-beginners] Padding List with Zeros

jean verdier verdier.jean at gmail.com
Wed Sep 15 04:54:40 EDT 2010


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" <lorenzo.isella at gmail.com
> >>> <mailto:lorenzo.isella at 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 at haskell.org <mailto:Beginners at haskell.org>
> >>>> http://www.haskell.org/mailman/listinfo/beginners
> >>> 
> >> 
> >> _______________________________________________
> >> Beginners mailing list
> >> Beginners at haskell.org
> >> http://www.haskell.org/mailman/listinfo/beginners
> > 
> > 
> > _______________________________________________
> > Beginners mailing list
> > Beginners at haskell.org
> > http://www.haskell.org/mailman/listinfo/beginners
> 
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners




More information about the Beginners mailing list