[armedbear-devel] Backquote bug
fahree at gmail.com
Thu Feb 20 14:50:10 UTC 2014
On Thu, Feb 20, 2014 at 2:50 AM, Pascal J. Bourguignon
<pjb at informatimago.com> wrote:
> 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)
Oops, bad copy/paste. The correct answer is #(1 2 3 3 3) indeed as pjb
and ECL, LispWorks and fare-quasiquote get it right.
>> 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.
That's also my interpretation. allegro, ccl, clisp, sbcl, seem to disagree.
> "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)
No, I was wrong in copy/pasting. The result is indeed #(1 2 3 3 3). Mea culpa.
> `#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.
Maybe it should be an error, then, or demons should be made to fly out
of one's nose.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Some cause happiness wherever they go. Others whenever they go.
More information about the armedbear-devel