+ 1. What is a hole? How can we implement it?
+
+ A hole is a bound variable. `30 & < >` is `lambda x. 30 & x`.
+
+ 2. What should `f` be, so that the result of the second step, namely `f (20, 30 & < >)`, is `30 & (20 & < >)`?
+
+ let
+ f (y, prev) = lambda x. prev (y & x)
+ in ...
+
+ 3. Given that choice of `f`, what should `z` be, so that the result of the first step, namely `f (30, z)` is `30 & < >`?
+
+ The identity function: `f (30, (lambda y. y))` will reduce to `lambda x. (lambda y. y) (30 & x)`, which will reduce to `lambda x. 30 & x`.
+
+ 4. At the end of the `fold_right`, we're going to end with something like `30 & (20 & (10 & < >))`. But what we want is `[30, 20, 10]`. How can we turn what we've gotten into what we want?
+
+ Supply it with `[]` as an argument.
+
+ 5. So now put it all together, and explain how to express `reverse xs` using `fold_right` and primitive syntax like `lambda`, `&`, and `[]`?
+
+ let
+ f (y, prev) = lambda x. prev (y & x);
+ id match lambda y. y;
+ reverse xs = (fold_right (f, id) xs) []
+ in reverse