Opened 11 years ago

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

Reported by: Owned by: Mark Evenson major 1.9.3 interpreter 1.3.0-dev ansi lacunae

### 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)
```

### comment:1 Changed 11 years ago by Mark Evenson

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

### comment:2 Changed 11 years ago by Mark Evenson

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 Changed 11 years ago by Mark Evenson

Try for sbcl

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

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

### comment:4 Changed 10 years ago by Mark Evenson

Milestone: 1.3.0 → 2.0

Ticket retargeted after milestone closed

### comment:5 Changed 10 years ago by Mark Evenson

Milestone: 2.0 → 2.0.0

Milestone renamed

### comment:6 Changed 10 years ago by Mark Evenson

Milestone: 2.0.0 → 1.4.0

### comment:7 Changed 8 years ago by Mark Evenson

Milestone: 1.4.0 → 1.5.0

Ticket retargeted after milestone closed

### comment:8 Changed 7 years ago by Mark Evenson

Milestone: 1.5.0 → 1.6.0

Ticket retargeted after milestone closed

### comment:9 Changed 5 years ago by Mark Evenson

Milestone: 1.6.0 → 1.6.1

Ticket retargeted after milestone closed

### comment:10 Changed 4 years ago by Mark Evenson

Milestone: 1.6.1 → 1.6.2

Ticket retargeted after milestone closed

### comment:11 Changed 4 years ago by Mark Evenson

Milestone: 1.6.2 → 1.7.0

### comment:12 Changed 4 years ago by Mark Evenson

Milestone: 1.7.0 → 1.7.1

Ticket retargeted after milestone closed

### comment:13 Changed 4 years ago by Mark Evenson

Milestone: 1.7.1 → 1.7.2

Ticket retargeted after milestone closed

### comment:14 Changed 4 years ago by Mark Evenson

Milestone: 1.7.2 → 1.8.0

Milestone renamed

### comment:15 Changed 4 years ago by Mark Evenson

Milestone: 1.8.0 → 1.8.1

Ticket retargeted after milestone closed

### comment:16 Changed 2 years ago by Mark Evenson

Milestone: 1.8.1 → 1.9.0

### comment:17 Changed 19 months ago by Mark Evenson

Milestone: 1.9.0 → 1.9.1

### comment:18 Changed 19 months ago by Mark Evenson

Milestone: 1.9.1 → 1.9.2

### comment:19 Changed 15 months ago by Mark Evenson

Milestone: 1.9.2 → 1.9.3
Note: See TracTickets for help on using tickets.