Opened 12 years ago

Last modified 3 years ago

#349 new defect

ANSI lacuna: interaction between SHARPSIGN-LEFT-PARENTHENSIS and backquote splice operator

Reported by: Mark Evenson Owned by:
Priority: major Milestone: 1.9.3
Component: interpreter Version: 1.3.0-dev
Keywords: ansi lacunae Cc:
Parent Tickets:

Description

Faré notes in <http://article.gmane.org/gmane.lisp.armedbear.devel/3101>:

What should this form read as?
`#5(1 , <at> `(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)

Change History (19)

comment:1 by Mark Evenson, 12 years ago

Keywords: ansi lacunae added
Summary: Incorret interaction between SHARPSIGN-LEFT-PARENTHENSIS and backquote splice operatorANSI lacuna: interaction between SHARPSIGN-LEFT-PARENTHENSIS and backquote splice operator

comment:2 by Mark Evenson, 12 years ago

Pascal notes

#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.

comment:3 by Mark Evenson, 12 years ago

Try for sbcl

`#6(1 ,@`(2 3 4))
==>
#(1 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4)

is surely bad…

Last edited 12 years ago by Mark Evenson (previous) (diff)

comment:4 by Mark Evenson, 12 years ago

Milestone: 1.3.02.0

Ticket retargeted after milestone closed

comment:5 by Mark Evenson, 12 years ago

Milestone: 2.02.0.0

Milestone renamed

comment:6 by Mark Evenson, 12 years ago

Milestone: 2.0.01.4.0

comment:7 by Mark Evenson, 10 years ago

Milestone: 1.4.01.5.0

Ticket retargeted after milestone closed

comment:8 by Mark Evenson, 9 years ago

Milestone: 1.5.01.6.0

Ticket retargeted after milestone closed

comment:9 by Mark Evenson, 7 years ago

Milestone: 1.6.01.6.1

Ticket retargeted after milestone closed

comment:10 by Mark Evenson, 6 years ago

Milestone: 1.6.11.6.2

Ticket retargeted after milestone closed

comment:11 by Mark Evenson, 6 years ago

Milestone: 1.6.21.7.0

comment:12 by Mark Evenson, 6 years ago

Milestone: 1.7.01.7.1

Ticket retargeted after milestone closed

comment:13 by Mark Evenson, 6 years ago

Milestone: 1.7.11.7.2

Ticket retargeted after milestone closed

comment:14 by Mark Evenson, 6 years ago

Milestone: 1.7.21.8.0

Milestone renamed

comment:15 by Mark Evenson, 6 years ago

Milestone: 1.8.01.8.1

Ticket retargeted after milestone closed

comment:16 by Mark Evenson, 4 years ago

Milestone: 1.8.11.9.0

comment:17 by Mark Evenson, 3 years ago

Milestone: 1.9.01.9.1

comment:18 by Mark Evenson, 3 years ago

Milestone: 1.9.11.9.2

comment:19 by Mark Evenson, 3 years ago

Milestone: 1.9.21.9.3
Note: See TracTickets for help on using tickets.