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

SOME (and other mapping functions)



I prefer to use mapping functions when possible instead of do or loop.
However, it appears that I pay a penalty for my stylistic preference
because when using some lambda expressions as the function argument
(e.g., one that references a lexical variable other than the parameter)
space gets allocated.

(defun greater-some (x list)
    (some #'(lambda(e)(> e x)) list))

(time (greater-some 7 '(1 2 3 4 5 6 7 8)))
(GREATER-SOME 7 '(1 2 3 4 5 6 7 8)) took 0 milliseconds (0.000 seconds) to run.
 40 bytes of memory allocated.
T

Is there any declaration, etc that can avoid this spoce allocation.  Neither
do or loop allocate any space:
(defun greater-do(x list)
    (do ((l list (cdr l)))
        ((or (null l)
             (> (car l) x))
         (not (null l)))))
(defun greater-loop(x list)
    (loop for e in list
          when (> x e)
          return t))
? (time (greater-do 7 '(1 2 3 4 5 6 7 8)))
(GREATER-DO 7 '(1 2 3 4 5 6 7 8)) took 0 milliseconds (0.000 seconds) to run.
T
? (time (greater-loop 7 '(1 2 3 4 5 6 7 8)))
(GREATER-LOOP 7 '(1 2 3 4 5 6 7 8)) took 0 milliseconds (0.000 seconds) to run.
T

Thanks
Mike

Michael Pazzani
Department of Information and Computer Science
University of California
Irvine, CA 92717-3425
phone (714) 856-5888
fax   (714) 856-4056
e-mail pazzani@ics.uci.edu