Define function that constructs a list, just by giving the length and how to compute the Nth element in terms of the formals and index.
This takes many of the same arguments as defiteration, and in fact it uses defiteration. But instead of giving the step function for the iteration, you give the value of the Nth element of the list. You must also provide the keyword :last, giving the length of the list.
What you end up with is your top-level function, definition disabled, and four rules:
(def-list-constructor foo (x y) "optional doc string" (declare (xargs ...)) ;; optional declare forms (+ idx-var x y) ;; value of the IDX-VARth element :length (bar x y) ;; final index :index idx-var ;; counter variable, default N ... defiteration args ...)