Skip to content

Expressions ((setf ..) ..) are treated as compound forms, (setf ..) is considered a valid local macro name

If the car of the compound form is not a symbol, then that car must be a lambda expression

http://clhs.lisp.se/Body/03_abab.htm

Yet, on ECL,

(defun (setf my) (new) new)
;; => (SETF MY)
((setf my) t)
;; => T

and

(flet (((setf my-local) (new) new))
  ((setf my-local) t))
;; => T

What is yet more alarming, (setf ..) is considered a valid local macro name:

(macrolet (((setf oops-local) ())))
;; => NIL

At least, it is not considered a valid macro name:

(defmacro (setf oops) ())
;; >> ; Evaluation aborted on #<a SIMPLE-ERROR 0x7fc9a453d100>.

Details:

     VERSION "24.5.10"
      VCS-ID "UNKNOWN"
          OS "Linux"
  OS-VERSION "6.1.53-gentoo-r1"
MACHINE-TYPE "x86_64"
    FEATURES (:SWANK :SERVE-EVENT :QUICKLISP :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2
              :ASDF :OS-UNIX :NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :WALKER :CDR-6
              :GRAY-STREAMS-MODULE :CDR-1 :CDR-5 :LINUX :FORMATTER :CDR-7
              :ECL-WEAK-HASH :LITTLE-ENDIAN :ECL-READ-WRITE-LOCK :SSE2 :LONG-LONG
              :UINT64-T :UINT32-T :UINT16-T :COMPLEX-FLOAT :LONG-FLOAT :UNICODE :DFFI
              :CLOS-STREAMS :CMU-FORMAT :UNIX :ECL-PDE :DLOPEN :CLOS :THREADS
              :BOEHM-GC :ANSI-CL :COMMON-LISP :FLOATING-POINT-EXCEPTIONS
              :IEEE-FLOATING-POINT :PACKAGE-LOCAL-NICKNAMES :CDR-14 :PREFIXED-API :FFI
              :X86_64 :COMMON :ECL)