[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

loop speed

As Guy Steele recently pointed out, it is certainly the case
that constructs written with loop can often be recoded using
the mapping functions.  I stopped using the mapping
functions a long time ago in Interlisp in large part because
I found that I.S.OPR expressions, the inspiration for loop,
ran significantly faster.  Has the situation changed much?
I certainly have not made a careful comparison of the matter
recently, but I just timed the two following functions,
after compilation:

(defun remove-if-test (l)
  (remove-if #'atom l))

(defun loop-test (l)
  (loop for x in l unless (atom x) collect x))

Loop-test runs 3 to 4 times faster than remove-if-test in
Symbolics Common Lisp on a 3640 on long lists of nils.
Inspired by the fact that Guy can recode many uses of loop
into maps, perhaps someone can write a compiler that can
take maps back to loops for compilation efficiency!