Opened 12 years ago
Last modified 2 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 Changed 12 years ago by
| Keywords: | ansi lacunae added |
|---|---|
| Summary: | Incorret interaction between SHARPSIGN-LEFT-PARENTHENSIS and backquote splice operator → ANSI lacuna: interaction between SHARPSIGN-LEFT-PARENTHENSIS and backquote splice operator |
comment:2 Changed 12 years ago by
comment:3 Changed 12 years ago by
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…
comment:6 Changed 12 years ago by
| Milestone: | 2.0.0 → 1.4.0 |
|---|
comment:11 Changed 5 years ago by
| Milestone: | 1.6.2 → 1.7.0 |
|---|
comment:16 Changed 4 years ago by
| Milestone: | 1.8.1 → 1.9.0 |
|---|
comment:17 Changed 3 years ago by
| Milestone: | 1.9.0 → 1.9.1 |
|---|
comment:18 Changed 3 years ago by
| Milestone: | 1.9.1 → 1.9.2 |
|---|
comment:19 Changed 2 years ago by
| Milestone: | 1.9.2 → 1.9.3 |
|---|
Note: See
TracTickets for help on using
tickets.
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.