[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] match.scm
- To: Alex Shinn <alexshinn@x>
- Subject: Re: [Scheme-reports] match.scm
- From: Peter Kourzanov <peter.kourzanov@x>
- Date: Wed, 15 Dec 2010 20:32:36 +0100
- Cc: r6rs-discuss@x, scheme-reports@x
- In-reply-to: <AANLkTik7FEFGKpvs0hSZs8_q=-XRw7FfdV0v+TKLge49@mail.gmail.com>
- References: <AANLkTik7FEFGKpvs0hSZs8_q=-XRw7FfdV0v+TKLge49@mail.gmail.com>
> > * missing struct/records support? I think we should specify it,
> > and let implementations decide on its efficient representation
> These are actually commented out in the source. The upstream
> chibi-scheme version has support for matching SRFI-99 records.
Should I look here?
> > * at some point, it does vector->list for matching inside
> > quasiquote. Isn't it a bit inefficient?
> Vectors in general are rare to match against - a lot of matching
> libraries use that trick for matching even outside of quasiquote.
Not in numeric/linear algebra code. But I agree, its a neat trick,
which I have also used at some point to get pattern matching to
work using pure R5RS syntax-rules matcher ;-) But I have since
abandoned this idea as matching for particular values at large (but
bounded offsets) inside vectors is then very inefficient.
> It's easy enough to optimize if you feel the extra code is worth
> > * are nested ellipses supported? Looks like they are quite
> > useful...
> Please read the comment in the source regarding this - they are
> intentionally disabled.
Couldn't find it in the sources... Any hints?
> Nested tree patterns aren't disabled, though,
> > * (? predicate) matching is a bit ugly when you use (? number?).
> > Reminds me of Bigloo/Queinnec's matcher
> Alternate syntax suggestions are welcome.
Actually, I would like to propose
(predicate? : accessor1 = pattern : accessor2 = pattern ...)
where accessorN can be something like a lambda abstraction
(lambda (x) x) or (fun args ...) returning a singular
function expecting matched data. Predicate? can be any
singular function returning boolean.
So, the dispatch is this case is better on the second form (:),
rather than the first (?)...
> > * where are guards?
> You can combine predicates and/or use the failure continuation.
Isn't this too verbose? Don't we want to abbreviate (this very common
case) in a manner already pretty much accepted by ML, Haskell, Scala
and R6RS compile-time pattern-matcher?
> > * matching numbers: we need to use (=) to match them, not equal?
> > (or eqv? and eq?)
> Do we? :)
Typing. A good example: 42+0.0 should match both 42.0 and 42.
And then lets have n+k patterns;-)
Scheme-reports mailing list