Opened 3 years ago

Closed 5 months ago

#1736 closed defect (fixed)

Incomplete SRFI-46/R7RS tail pattern support

Reported by: Vasilij Schneidermann Owned by:
Priority: minor Milestone: 6.0.0
Component: core libraries Version: 5.2.0
Keywords: syntax-rules srfi-46 Cc:
Estimated difficulty:

Description

I've run into an expansion error when trying to install (chibi optional). It's using a tail pattern of the (binding ... . rest) kind. SRFI-46 only shows one tail pattern example of the ((binding ...) . rest) kind, but R7RS is explicit about allowing both:

⟨transformer spec⟩ −→
(syntax-rules (⟨identifier⟩*) ⟨syntax rule⟩*)
| (syntax-rules ⟨identifier⟩ (⟨identifier⟩*)
⟨syntax rule⟩*)
⟨syntax rule⟩ −→ (⟨pattern⟩ ⟨template⟩)
⟨pattern⟩ −→ ⟨pattern identifier⟩
| ⟨underscore⟩
| (⟨pattern⟩*)
| (⟨pattern⟩+ . ⟨pattern⟩)
| (⟨pattern⟩* ⟨pattern⟩ ⟨ellipsis⟩ ⟨pattern⟩*)
| (⟨pattern⟩* ⟨pattern⟩ ⟨ellipsis⟩ ⟨pattern⟩*
. ⟨pattern⟩)
| #(⟨pattern⟩*)
| #(⟨pattern⟩* ⟨pattern⟩ ⟨ellipsis⟩ ⟨pattern⟩*)
| ⟨pattern datum⟩

According to SRFI-46 alexpander does support both patterns just fine, the error message originates from synrules.scm. I've attached a file with simplified examples for both the working and not working pattern. I've also done a brief check across R7RS-compliant Scheme implementations, it seems that Cyclone doesn't support it either, while Chibi, Kawa, Gauche, Sagittarius and Foment do.

Attachments (1)

test.scm (642 bytes) - added by Vasilij Schneidermann 3 years ago.

Download all attachments as: .zip

Change History (3)

Changed 3 years ago by Vasilij Schneidermann

Attachment: test.scm added

comment:1 Changed 5 months ago by felix winkelmann

Milestone: someday6.0.0

comment:2 Changed 5 months ago by felix winkelmann

Resolution: fixed
Status: newclosed

Should work now in C6

Note: See TracTickets for help on using tickets.