-<!--
-Hint. Suppose the list we want to reverse is [10, 20, 30]. Applying `fold_right` to this will begin by computing `f 30 z` for some `f` and `z` that we specify. If we made the result of that be something like `30 & blah`, or any larger structure that contained something of that form, it's not clear how we could, using just the resources of `fold_right`, reach down into that structure and replace the `blah` with some other element, as we'd evidently need to, since after the next step we should get `30 & (20 & blah)`. What we'd like instead is something like this:
-
- 30 & < >
-
-Where `< >` isn't some *value* but rather a *hole*. Then with the next step, we want to plug into that hole `20 & < >`, which contains its own hole. Getting:
-
- 30 & (20 & < >)
-
-And so on. That is the key to the solution. The questions you need to answer, to turn this into something executable, are:
-
-1. What is a hole? How can we implement it?
-
-2. What should `f` be, so that the result of `f (20, 30 & < >)`, is `30 & (20 & < >)`?
-
-3. What should `z` be, so that the result of `f (30, z)` is `30 & < >`?
-
-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?
-
--->