Hello,
I ran into a situation where I think ECL 16.1.3 has a bug in it:
Linux violet > ecl ;;; Loading "/home/psilord/quicklisp/setup.lisp" ;;; Loading #P"/usr/local/lib/ecl-16.1.3/asdf.fas" ECL (Embeddable Common-Lisp) 16.1.3 (git:UNKNOWN) Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya Copyright (C) 1993 Giuseppe Attardi Copyright (C) 2000 Juan J. Garcia-Ripoll Copyright (C) 2016 Daniel Kochmanski ECL is free software, and you are welcome to redistribute it under certain conditions; see file 'Copyright' for details. Type :h for Help. Top level in: #<process TOP-LEVEL>.
(defstruct (foo (:type vector) (:predicate nil)) qux bar)
Condition of type: SIMPLE-ERROR NIL is an illegal structure predicate.
Available restarts:
1. (RESTART-TOPLEVEL) Go back to Top-Level REPL.
Broken at SI:BYTECODES. [Evaluation of: (SI:TOP-LEVEL T)] In: #<process TOP-LEVEL>.
The clhs spec says:
http://www.lispworks.com/documentation/lw70/CLHS/Body/m_defstr.htm
most notably:
":predicate
This option takes one argument, which specifies the name of the type predicate. If the argument is not supplied or if the option itself is not supplied, the name of the predicate is made by concatenating the name of the structure to the string "-P", interning the name in whatever package is current at the time defstruct is expanded. If the argument is provided and is nil, no predicate is defined. A predicate can be defined only if the structure is named; if :type is supplied and :named is not supplied, then :predicate must either be unsupplied or have the value nil. "
In this case, :type is supplied, :named is not supplied, and therefore :predicate must either be unsupplied or have the value NIL. In my case, it has the value NIL.
It appears to me that I have written legal CL, but ECL doesn't think so.
Thank you!
-pete