To add a SEED to your own function and make it work you need to follow three simple rules:
Add keyword SEED into the function arguments.
(rnd-seed seed) should be placed at the beginning of the function.
Nested functions that use seed need to use a (seed) function and not a seed argument.
Example:
(defun rnd-number (n low high &key seed)
(do-verbose ("rnd-number")
(rnd-seed seed)
(if (zerop n)
nil
(cons (round (+ low (rnd-round 0 (- high low) :seed (seed))))
(rnd-number (decf n) low high :seed (seed))))))
Each time we evaluate the expression we get a different result.
(rnd-number 12 0 5)
=> (0 3 2 5 3 3 4 3 2 2 4 4)
Adding seed to the expression will produce always the same result.
(rnd-number 12 0 5 :seed 45)
=> (2 2 5 4 5 0 5 3 5 3 1 1)