Hi,
I think I once saw this program on an old set of slides by Michael Hanus
        pmap :: (a -> b) -> [a] -> [b]
        pmap _ [] = []
        pmap f (x:xs) | y =:= f x & ys =:= pmap f xs = y : ys
                        where
                        y,ys free
implementing a  /parallel map/  for lists. I  always liked  this program
since functorial mapping  is treated as happening in parallel.  But as I
learn the equality constraint in Curry  is strict such that this program
forces the  evaluation of the head  and the tail of  the resulting list.
Which could be against intuition in a lazy language.
When I  tried to get  a bit aquainted  with how /function  patterns/ are
realised in Curry, I learned that there's now also a non-strict equality
constraint.
Maybe this  could also  be used  to combine the  lazy with  the parallel
evaluation behaviour allowing to map  over infinite lists with partially
defined elements.
        pmap' :: (a -> b) -> [a] -> [b]
        pmap' _ [] = []
        pmap' f (x:xs) | y =:<= f x & ys =:<= pmap' f xs = y : ys
                        where
                        y,ys free
        -- PMAP> take 5 (tail (pmap' (div 5) [0..]))
        -- Result: [5,2,1,1,1] ? ;
Cheers,
Sebastian
_______________________________________________
curry mailing list
curry_at_lists.RWTH-Aachen.DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
Received on Mi Mär 12 2008 - 16:37:03 CET