Just maintain a list of processed points ..
Here are 2 similair iterative suggestions:
; Unique point list - iterative
(defun UqpL ( fuzz pL / L p )
(while pL
(setq p (car pL))
(if (or (null L) (not (vl-some '(lambda (x) (equal x p fuzz)) L))) (setq L (cons p L)) )
(setq pL (cdr pL))
); while
(reverse L)
); defun UqpL
; Unique point list - iterative
(defun UqpL ( fuzz pL / L p )
(while pL
(setq p (car pL))
(or (vl-some '(lambda (x) (equal x p fuzz)) (cdr pL)) (setq L (cons p L)) )
(setq pL (cdr pL))
); while
(reverse L)
); defun UqpL
I also tried recursively, but was not successful - since It requires building and checking the new list at the same time