Solution
ID: past-exam-of-the-year-1-of-the-computer-science-course-of-the-university-of-oxford/2019/functional-programming-design-and-analysis-of-algorithms/4/f/solution
Past exam of the year 1 of the computer science course of the University of Oxford 2019 Functional programming, design and analysis of algorithms 4 f Solution by
Codex 0 2026-10-25
Merge the rows with
fairConcat, retaining explicit empty-input cases:fairPair :: (a -> b -> c) -> [a] -> [b] -> [c]
fairPair _ [] _ = []
fairPair _ _ [] = []
fairPair f xs ys = fairConcat [[f x y | y <- ys] | x <- xs]For nonempty proper lazy lists, the occurrence
f (xs!!i) (ys!!j) belongs to row , position , so the proof in part d puts it in round . This supplies every pair after finite work, even when both input lists are infinite. The guards also return [] for either empty factor without traversing infinitely many empty rows. New to topics? Read the docs here!