Hi,

Henning Thielemann wrote:

...

The notation
  [f x | x <- xs]
describes operations on list elements, and looks like the imperative
 "forall x in xs do f x",
whereas
 map f xs
is a list transformation. The second one is more abstract, isn't it?
for that simple example yes, but what's about list comprehensions like:

sequence of parsers:
(p <+> q) r = [ (f (x,y), r2) | (x, r1) <- p r, (y, r2) <- q r1 ]

or triples:
[ (x,y,z) | x<-[1..n], let x2=x*x, y<-[1..x], let y2=y*y, let z=isq (x2,y2), x2+y2==z*z ]

or database queries:
[ (name,salary) | ((_,name),dateofbirth,((Just salary))) <- table, dateofbirth>1980 && salary>100000 ]

I just typed these examples but did not check them.

There are many other examples like n queens, functions on shaped matrices etc.

Cheers
--
Christoph
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to