[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [r6rs-discuss] [scheme-reports] Scheme pattern matching & R*RS



On 01/22/2011 08:23 AM, David Van Horn wrote:
> On 1/22/11 10:56 AM, Andre van Tonder wrote:
>> ML or Haskell programs are chock full of the former, which looks cool
>> exactly until they want to add an extra field to a data type and all of
>> a sudden realize that they have to change their whole program and all
>> programs that import the same types.
>
> That doesn't *have* to be the case.  Here's an example Racket program
> that uses pattern matching on a data type extended with an extra field:
>
> #lang racket
> (define-struct node (left right))
> (define-struct (fancy node) (color))
>
> (match (fancy 'l 'r 'c)
>     [(node l r) (list l r)])

That woould be less of a problem with named fields/properties.
For example:

(match (fancy 'l 'r 'c)
    [(node left: l right: r) (list l r)])

This assumes that a syntax or convention for object
construction like this (which Kawa uses):

    (TYPE NAME1: VALUE1 NAME2: VALUE2 ...)

Hence it is natural to support pattern-match using:

    PATTERN ::= ....
      | (TYPE NAME1: PATTERN1 NAME2: PATTERN2 ...)

The semantics would be TYPE has to be a supertype of the
matchee's type, the matchee has at least the named fields/properties
(or perhaps: TYPE has at least the named fields/properties),
the corresponding field values match the corresponding patterns.
-- 
	--Per Bothner
per@x   http://per.bothner.com/

_______________________________________________
r6rs-discuss mailing list
r6rs-discuss@x
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss