Hi,
I wasn't looking for speed performance, I only wanted to show how to build a generic higher order function which accepts as argument any predicate function (not only an equality or a comparison function).
I wrote it recursively because it's the way it came in my mind. Lee's positions1 shows a way to replace the auxiliary recursive function (loop) with a while statement.
If I really wanted to win some milliseconds and/or deal with very large collection, I won't use AutoLISP...