f [] y = y; f (x:xs) y = f xs (f xs z)