Hi!
Ok, given a list of values vl and two lists l1 and l2, I want to iterate
over all v's that are either in l1 or l2.
(dolist (v (remove-if-not #'(lambda(local) (or (member local l1 :test
#'equal) (member local l2 :test #'equal))) vl))
does the trick (and is taken from my code; of course I use more readable
names there ;). There might be other ways to achieve it, but that is not
of interest here.
When compiling this with speed 3 (or 2 for that matter) and eveything
else 0, I get a compiler warning:
; note: unable to
; optimize away possible call to FDEFINITION at runtime
; due to type uncertainty:
; The first argument is a (OR FUNCTION SYMBOL), not a FUNCTION.
This only refers to the second call to member, i.e. (member local
l2 :test #'equal)
As soon as I use just either of the two calls to member, the warning
disappears. That is, both
#'(lambda(local) (or (member local l1 :test #'equal)))
or
#'(lambda(local) (or (member local l2 :test #'equal)))
don't bother the compiler at all. ??
Is this expected behavior? Am I doing something obviously stupid that I
don't see here?
Kai-Florian
--
---------------------------------------------------------------------
Dr.-Ing. Kai-Florian Richter richter@...
Cognitive Systems
FB 3 Mathematik & Informatik phone: +49-421-218-64283
Universitaet Bremen fax: +49-421-218-9864283
---------------------------------------------------------------------
|