In standard ML you can write fun zip _ _ = [] | zip (a::as) (b::bs) = (a,b) :: (zip as bs) What would be the Ur equivalent of this kind of pattern matching?