[Haskell-cafe] Re: Generalizing zip

2006-11-17 Thread Jón Fairbairn
Jón Fairbairn [EMAIL PROTECTED] writes:

 Jason Dagit [EMAIL PROTECTED] writes:
 
  Well, this is basically just a zip with a special base case.  But you
  [...]
 I wonder if there is mileage to be had from persuing
 something like this, rather different (off top of head, very
 provisional, EOE c) approach:
 
extend_infinitely l = map Just l ++ repeat Nothing
promote1 rel (Just a) b = rel a b
promote1 rel Nothing b = False
is_pfx_of l1 l2 = and (zipWith (promote1 (==)) (extend_infinitely l2) l1)

or, possibly better 

   extend_infinitely l = map Just l ++ repeat Nothing
   is_pfx_of l1 l2 = and (zipWith (==) (extend_infinitely l2) (map Just l1))

-- 
Jón Fairbairn [EMAIL PROTECTED]


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


[Haskell-cafe] Re: Generalizing zip

2006-11-16 Thread Jón Fairbairn
Jason Dagit [EMAIL PROTECTED] writes:

 Well, this is basically just a zip with a special base case.  But you
 can't just write it with zipWith because zipWith stops when it exausts
 either list.
 
 How about we define zipWith'' like this:
 zipWith'' _ [] _  l _ = [l]
 zipWith'' _ _  [] _ r = [r]
 zipWith'' f (x:xs) (y:ys) l r = f x y : zipWith'' f xs ys l r
 
 Then we can write:
 isPrefixOf xs ys = and (zipWith'' (==) xs ys True False)

I wonder if there is mileage to be had from persuing
something like this, rather different (off top of head, very
provisional, EOE c) approach:

   extend_infinitely l = map Just l ++ repeat Nothing
   promote1 rel (Just a) b = rel a b
   promote1 rel Nothing b = False
   is_pfx_of l1 l2 = and (zipWith (promote1 (==)) (extend_infinitely l2) l1)

? For at least the few minutes I've thought about it, it
seems like promote and extend_infinitely might be more
generally userful. I've probably missed something better,
too.

 A point free reduction might look like the following and probably
 isn't worth it:
 isPrefixOf = (and .) . flip flip False . flip flip True . zipWith'' (==)

probably?

-- 
Jón Fairbairn [EMAIL PROTECTED]


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