[armedbear-devel] Backquote bug
Pascal J. Bourguignon
pjb at informatimago.com
Thu Feb 20 07:50:33 UTC 2014
Faré <fahree at gmail.com> writes:
> Subtle bug in ABCL.
>
> What should this form read as?
> `#5(1 ,@`(2 3))
>
> ECL, LispWorks and fare-quasiquote agree on #(1 2 3 2 3)
> allegro, ccl, clisp, sbcl return the arguably conformant #(1 2 3 2 3 2 3 2 3)
> abcl, cmucl, gcl, xcl all return the arguably completely buggy #(1 2 3)
#5( anything ) should return a vector of dimension 5 in any case.
Furthermore,
"If the number of objects supplied before the closing ) is less than
the unsigned decimal integer but greater than zero, the last object
is used to fill all remaining elements of the vector."
so they're all wrong, and expected result should be: #5(1 2 3 3 3)
Basically,
`#5(1 ,@`(2 3))
should take:
`#(1 ,@`(2 3))
which all implementation agree that's read as:
#(1 2 3)
and extends the last element to give:
#5(1 2 3 3 3)
Now, since the reader macro is #\`, we should really apply #\` rules,
but the only rule for vectors is:
* `#(x1 x2 x3 ... xn) may be interpreted to mean
(apply #'vector `(x1 x2 x3 ... xn)).
so one could argue that there's no rule for `#n(…), and therefore it's
not a conforming form anyways.
If #n(…) is collapsed to #(…) then the abcl result is correct, as per
the above rule.
--
__Pascal Bourguignon__
http://www.informatimago.com/
"Le mercure monte ? C'est le moment d'acheter !"
More information about the armedbear-devel
mailing list