free-zombie
By: a guest | Oct 27th, 2008 | Syntax:
Lisp | Size: 0.55 KB | Hits: 64 | Expires: Never
(defun with-unique-digits (to)
(let ((ndigits (ceiling (log to 10))))
(find-uniques to () ndigits 0)
))
(defun find-uniques (max forbidden ndigits add)
(cond
((> add max) ())
((= ndigits 0) (list add))
(t (append
(if (member 0 forbidden) ()
(find-uniques max (and forbidden (cons 0 forbidden)) (1- ndigits) add))
(loop for i from 1 to 9
append (if (member i forbidden) ()
(find-uniques max (cons i forbidden) (1- ndigits)
(+ add (* i (expt 10 (1- ndigits))))))
)
))
))