[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] [r6rs-discuss] [scheme-reports] Scheme pattern matching & R*RS
On Sat, 22 Jan 2011, David Rush wrote:
On 22 January 2011 00:09, Andre van Tonder <andre@x> wrote:
It seems to go against the founding moral principles
of Scheme.
What? It's a single unifying mechanism for type-dispatch. It allows
unification of call/return without resorting to CALL-WITH-VALUES. If
there's any language idea out in the wild that Scheme *hasn't" got
already that fits the Clinger criterion more than pattern matching,
At the risk of sounding like a theologist, I suppose we are both referring to
the pronouncement:
Programming languages should be designed not by piling feature on top of
feature, but by removing the weaknesses and restrictions that make additional
features appear necessary.
and, much like theologists, deriving opposite meanings from it.
I consider pattern matching a pretty huge feature that would be justifiable in
the core only if it added orthogonal expressivity, which it does not.
I used to be all gung ho about pattern matching when I first encountered
Scheme, until I started reading some elegant big programs in Scheme and got used
to the more Schemely idiom of doing the same kind of thing, which turned out to
be as readable and often a better apporoach to abstraction.
What I mean is that pattern matching often does not encourage good abstraction.
Which of the following is the better abstracted program (independent of the
underlying data type and independent of, for example, adding new fields in data
types )?
(match data
((record node l r) (traverse l)
(traverse r))
((leaf x) (display x))
or
(cond ((node? data) (traverse (node-left data))
(traverse (node-right data))
((leaf? data) (display (leaf-content data))
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.
_______________________________________________
Scheme-reports mailing list
Scheme-reports@x
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports