hi! the (for var in list) clause silently skips non-lists. after a quick look i saw this in the sources: ;;; This is so the advanced user can choose how the end of a list is checked ;;; for. ;;; There are three choices for termination predicate in FOR...ON and ;;; FOR...IN, differing in their behavior on lists with a non-nil cdr: ;;; NULL: If lucky, will get an error when taking the cdr. Bad choice. ;;; ATOM: Will terminate correctly with no error. ;;; ENDP: Will give an appropriate error message. (defparameter *list-end-test* 'atom) 1) why is 'atom the default and not 'endp? it's not that hard to accidentally pass in a vector instead of a list... and then it's just silently skipped. imho 'endp as the default is much more reasonable, unless i miss something. 2) thinking this further, (for in) could even be smart enough to work on all kind sequences (possibly specializing for list at runtime to avoid elt-ing lists) and an in-list/on-list could be introduced for the current (for in) behaviour? this leads a bit far, though... any opinions? i think if there's no huge performance penalty then we should change 1 to use 'endp. -- - attila "- The truth is that I've been too considerate, and so became unintentionally cruel... - I understand. - No, you don't understand! We don't speak the same language!" Ingmar Bergman - Smultronstället (Wild Strawberries)