cormanlisp icon indicating copy to clipboard operation
cormanlisp copied to clipboard

Using keyword symbols as slot-descriptors in DEFSTRUCT

Open arbv opened this issue 6 years ago • 0 comments

From https://groups.google.com/d/msg/cormanlisp/_qB2KC4Nw5Q/Sgv6xoZ0CQAJ

I suspect using keyword symbols as slot-descriptors in defstruct doesn't meet HyperSpec and outcome is undefined. I was trying it as I have a list of keyword symbols I was thinking of using to create a structure with them as slot names.

Corman Lisp handles this except for initializing the the slots when making instances. Setf to slot later works.

e.g. ;; Corman Lisp 3.1 (Patch level 2) (defstruct book :title :pages) BOOK (setq book1 (make-book :title "hoho" :pages 190)) #S( BOOK :TITLE :TITLE :PAGES :PAGES ) book1 #S( BOOK :TITLE :TITLE :PAGES :PAGES )

(book-p book1) T (book-title book1) :TITLE (setf (book-title book1) "hihi") "hihi" (book-title book1) "hihi"

SBCL initializes as might be expected or hoped for, but with warnings

This is SBCL 1.4.14, an implementation of ANSI Common Lisp.

  • (defstruct book :title :pages) STYLE-WARNING: slot name of :TITLE indicates possible syntax error in DEFSTRUCT STYLE-WARNING: slot name of :PAGES indicates possible syntax error in DEFSTRUCT BOOK

  • (setq book1 (make-book :title "hi" :pages 190)) ; in: SETQ BOOK1 ; (SETQ BOOK1 (MAKE-BOOK :TITLE "hi" :PAGES 190)) ; ; caught WARNING: ; undefined variable: BOOK1 ; ; compilation unit finished ; Undefined variable: ; BOOK1 ; caught 1 WARNING condition #S(BOOK :TITLE "hi" :PAGES 190)

  • book1 #S(BOOK :TITLE "hi" :PAGES 190)

  • (book-p book1) T

  • (book-title book1) "hi"

  • (setf (book-title book1) "hihi") ; in: SETF (BOOK-TITLE BOOK1) ; (THE BOOK BOOK1) ; ; caught WARNING: ; undefined variable: BOOK1 ; ; compilation unit finished ; Undefined variable: ; BOOK1 ; caught 1 WARNING condition "hihi"

  • book1 #S(BOOK :TITLE "hihi" :PAGES 190)

What do you think of Corman Lisp behavior?

Cheers Nigel

arbv avatar Mar 20 '19 10:03 arbv