That is, now `f` is a function expecting *three* arguments: the head of the
current list, the tail of the current list, and the result of continuing to
fold `f` over the tail, with a given base value `z`.
Call this a **version 4** list. The empty list can be the same as in v3:
empty ≡ \f z. z
The list constructor would be:
make_list ≡ \h t. \f z. f h t (t f z)
It differs from the version 3 `make_list` only in adding the extra argument
`t` to the new, outer application of `f`.
Similarly, `five` as a v3 or Church numeral looks like this:
\s z. s (s (s (s (s z))))
or in other words:
\s z. s
Instead we could make it look like this:
\s z. s
That is, now `s` is a function expecting *two* arguments: the predecessor of the
current number, and the result of continuing to apply `s` to the base value `z`
predecessor-many times.
Jim had the pleasure of "inventing" these implementations himself. However,
unsurprisingly, he wasn't the first to do so. See for example [Oleg's report
on P-numerals](http://okmij.org/ftp/Computation/lambda-calc.html#p-numerals).