Hi,

Alex Shinn <alexsh...@gmail.com> writes:

> On Mon, Sep 6, 2010 at 9:12 PM, Ludovic Courtès <l...@gnu.org> wrote:
>>
>> Well, since there are only 9 of them, they could probably be implemented
>> as special cases, with an augmented ‘match-gen-ellipses’, which would be
>> told the minimum number of elements expected?
>
> Oh, the Wright syntax limited you to 9 forms, so "..10" is illegal?

>From Wright’s 1995 paper & doc I thought k > 9 wasn’t supported but
apparently it is:

--8<---------------cut here---------------start------------->8---
guile> (use-modules (ice-9 match)) ;; <- Wright’s code
guile> (match (iota 30) ((a ..10) a))
$1 = (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
28 29)
guile> (match (iota 30) ((a ..22) a))
$2 = (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
28 29)
guile> (version)
$3 = "1.8.7"
--8<---------------cut here---------------end--------------->8---

:-(

> "..1" is actually useful - it's the analog of "+" in regular
> expressions, and allows simplifying many syntax-rules
> patterns you see written (elt0 elt1 ...) as (elt ..1).  If
> the elements are more complex patterns this is a big
> win.

Agreed.

So perhaps one solution would be to:

  1. Have a special case for ‘..1’, since it’s quite handy.

  2. Have a new syntax form, like ‘.. k’, as you suggested.

What do you think?

Thanks,
Ludo’.

Reply via email to