Assume I have encoded the natural numbers in Haskell types, and that I have a way of adding and subtracting from them:
data Zero data Succ n -- ...
Inlining Martijn's code gives a very simple solution:
zero xs = xs suc n xs x = n (xs ++ [x]) buildList n = n []