questions on libraries, pattern matching etc
Duncan Mak
duncanmak@gmail.com
Tue Jun 30 04:38:34 GMT 2020
Hello Per,
So I'm trying to really learn the Kawa pattern language, but I couldn't
figure out how to match a literal.
While it was encouraging to see that this seems to work:
#|kawa:17|# (match '(foo 1 2) ([foo a b] (+ a b)))
3
But not this:
#|kawa:18|# (match '(foo 1 2) (['foo a b] (+ a b)))
java.lang.NullPointerException
So how do I match against a form like '(foo x y) and make sure that the
first element of the list is the literal symbol 'foo?
Also, this is more akin to destructuring, but is there a way to use the
match macro against a record?
Thanks!
Duncan.
On Mon, Jun 29, 2020 at 5:50 PM Per Bothner <per@bothner.com> wrote:
> On 6/29/20 1:50 PM, Duncan Mak wrote:
> > Hello Per,
> >
> > About the syntax for a match macro, work on SRFI 200 (draft) just
> started:
> >
> > https://srfi.schemers.org/srfi-200/srfi-200.html
>
> I haven't read it in detail, but it looks like the proposed pattern syntax
> is more-or-less compatible with Kawa.
>
> (There are lots of SRFIs coming out, and I've given up trying to pay close
> attention, especially since may of them are philosophically incompatible
> with Kawa. For example, Kawa has a consistent and powerful "sequence"
> concept and I think it's a mistake to define a large library of procedures
> for every sequence type, as seems to be the direction of R7RS-large.)
>
> The key thing about patterns in Kawa is they are integrated in the
> standard syntax forms, rather than being a pure "add-on" library feature.
> For example, the "variable" defined in a LET form can be a pattern.
>
> Also, not that in Kawa patterns and type-specifiers are integrated: a
> PATTERN
> can be:
> PATTERN ::TYPE
>
> To extend the syntax of Kawa patterns (which is highly deirable,
> and could plausible be done in the style of SRFI-200) one would need
> to extend kawa/lang/BindDecls.java, primarily.
> Not completely trivial, but not impossible either :-)
>
> > What do you think about adopting the syntax for the
> Wright-Cartwright-Shinn matcher?
> >
> > I've been trying to use match.scm (and its variants) in Kawa and simple
> patterns kinda work, but I see that:
> >
> > - matching records
> > - matching quasiquotes
> >
> > These two parts don't seem to be working.
> >
> > For now, I've backed out of using match.scm due to the missing features,
> but it'd really be nice to have a match macro that comes with Kawa scheme,
> following one of the grammar listed in the SRFI.
> >
> > Going a different direction, this design for a CASE* macro is also
> interesting,
> https://github.com/axch/pattern-case/blob/master/pattern-matching.txt
>
> While I'm OK with adding verious SRFI libraries for cmpatibility, patterns
> in
> the core part of Kawa should follow (and extend) the design in:
> https://www.gnu.org/software/kawa/Variables-and-Patterns.html#meta-pattern
> https://www.gnu.org/software/kawa/Definitions.html
> https://www.gnu.org/software/kawa/Local-binding-constructs.html
> --
> --Per Bothner
> per@bothner.com http://per.bothner.com/
>
--
Duncan.
More information about the Kawa
mailing list