TIC - One is poor technique and the other is lazy programing.
I completely agree - there are very few cases in which such functions cannot be avoided, in my mind they are the equivalent of resorting to a
goto statement to control code evaluation...
Perhaps one of the few situations in which the use of such functions is unavoidable is within a
vl-catch-all-apply expression to essentially break evaluation of a
vlax-for expression when a certain condition is met in order to avoid unnecessary iteration of an entire collection - but this is also a rare case.
As for the difference between the two, as far as I am aware, there is none. This may seem redundant, but then remember that AutoLISP is a high-level language and consequently there are many functions which are present merely for convenience - after all, any
cond expression can be written using a sequence of nested
if expressions, any loop could be written using
while,
1+/1- are entirely superfluous, etc. etc.