defstruct :predicate failure

Peter Keller psilord at cs.wisc.edu
Tue May 8 07:43:41 UTC 2018


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



More information about the ecl-devel mailing list