Hi,
on my Windows Vista system, with LispWorks 4.3.7, the ASDF hangs when trying to load the Alexandria library. I've debugged it and the reason is this line in macros.lisp:
((cons symbol (cons string-designator null))
I don't understand the details, but I assume something like this was really meant:
((cons symbol (cons string-designator nil))
At least this with this line it loads and compiles without errors. Maybe someone can test the function of the macro, if it still works with this change and change it in the repository.
Is there any reason why not using simply "list" instead of "cons" twice?
Regards,
Frank
"Frank Buss" fb@frank-buss.de writes:
Hi,
on my Windows Vista system, with LispWorks 4.3.7, the ASDF hangs when trying to load the Alexandria library. I've debugged it and the reason is this line in macros.lisp:
((cons symbol (cons string-designator null))
I don't understand the details, but I assume something like this was really meant:
((cons symbol (cons string-designator nil))
At least this with this line it loads and compiles without errors. Maybe someone can test the function of the macro, if it still works with this change and change it in the repository.
Is there any reason why not using simply "list" instead of "cons" twice?
Notice that the relevant line describe a type specifier.
NIL and NULL are different types: The _type_ NIL is the bottom type in Common Lisp's type lattice, it's the subtype of every other type. (T is the top of the lattice, everything is subtype of it.) Whereas NULL is the type that is a subtype of LIST, and SYMBOL and which contains the _value_ NIL.
As far as the code is concerned, I think it seems rather like a bug in Lispworks.
-T.
From: Tobias C. Rittweiler [mailto:tcr@freebits.de]
Notice that the relevant line describe a type specifier.
You are right, this would be not the same. I had have not much experience with type specifiers, but read the CLHS. An interesting topic, a meta-level, but only a subset of Common Lisp functions are allowed for defining type specifiers, if I understand it correctly (with the exception of satisfies).
As far as the code is concerned, I think it seems rather like a bug in Lispworks.
Yes, seems it is a bug in LispWorks 4.3.7. A file named "t_macros.fsl" is created while trying to compile it and then it seems like it gets into an endless loop, because the file "macro.fsl" doesn't exists. But the strange thing is, that the endless loop only occurs with this complicated type specifier.
I've found another workaround: It seems like satisfies works. So first I define this function in macros.lisp:
(defun symbol-string-designator-p (object) (and (typep object 'cons) (typep (car object) 'symbol) (typep (cadr object) 'string-designator) (null (caddr object))))
Then I can use
(satisfies symbol-string-designator-p)
later in the macro. This is not nice, but the code is not time critical, because only used in a macro expansion, so should be no problem.
Maybe would be interesting to analyze the real problem, but I guess it is already fixed in LispWorks >= 5, so I'll buy the new version, when I can spend some money for it :-)
alexandria-devel@common-lisp.net