[mercury-users] Another indexing proposal (was mercury websit e (was Suggestion: new operator))
Peter Schachte
schachte at cs.mu.OZ.AU
Sat Oct 21 12:42:45 AEDT 2000
On Fri, Oct 20, 2000 at 03:49:12AM -0700, Ralph Becket wrote:
> From schachte at cs.mu.OZ.AU on 20/10/2000 10:24:03
> >
> > An alternative which is in some ways preferable is parentheses:
> >
> > 1. It makes good sense to think of at least maps and arrays, and
> > maybe strings as well, as functions which can be applied to an
> > index.
> >
> > 2. Mercury already understands Variable(Arguments) syntax.
> >
> > 3. FORTRAN uses parentheses for array indexing. We do want to be
> > compatible with FORTRAN, don't we? :-)
> >
> > The only catch is that, of course, you can't apply a data value to some
> > arguments. It currently doesn't make sense, but that could be changed.
> > The syntax for declaring a type could be extended to allow the user to
> > somehow define what expression should be evaluated when a variable of
> > that type is applied to arguments.
>
> This isn't quite right. You *can* apply a value to arguments provided that
> value is a function (the higher order syntax was changed a few months ago).
By "data value" I meant first order data value.
> While it's appealing to think of mapping types as functions from keys to
> values, there are many other operations one can perform on them,
> so this functional view is somewhat misleading.
You can, at least in principle, apply other operations to functions, too
(eg, composition). I don't see how this is misleading. If I need to pass a
function from string to int to some predicate, why shouldn't I be able to
pass a map(string,int)? Even the name "map" suggests that it is essentially
a function.
> Also, it's arguable
> whether, say, strings should be viewed as mapping types at all.
I agree completely. The question is one of infrastructure; how and where
that infrastructure should be used is another question.
> I really don't like your suggestion for the reason that it (a) requires
> the programmer to be much more careful when parsing higher order code ("is
> it an application or some sort of lookup operation?")
I don't think that's the issue at all. I think the question is: is this
variable bound to something I can apply to these arguments? Why should I
care whether that variable is bound to a function implemented as code or as
a data structure?
> (b) by the same
> token it makes the compiler more complex, (c) requires a non-trivial
> change to the language and compiler
I'm not sure how much change it requires to the compiler, but it does seem
like it could be a fairly simple front-end thing that could be done right
after type checking.
, and (d) all this for what amounts to
> a little syntactic sugar that - in a different albeit no less concise form -
> can be achieved with no change to the language or compiler by introducing
> the
> `@' convention.
Why does it always seem to be syntax issues that are the most divisive?
But I think it's really more than syntax. To me the main point is that it
would let me treat a data structure that implements a function as a real
function. The fact Array(I) looks better than Array at I (at least to me)
stems from the fact that an array is just a finite function. (John Reynolds
has been suggesting that arrays be thought of as functions for decades.)
--
Peter Schachte <schachte at cs.mu.OZ.AU> Remember, "Euphemisms are for the
http://www.cs.mu.oz.au/~schachte/ differently brained."
Phone: +61 3 8344 9166 -- jamie at cdevil.unx.sas.com (James
Fax: +61 3 9348 1184 Cooper)
--------------------------------------------------------------------------
mercury-users mailing list
post: mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe: Address: mercury-users-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------
More information about the users
mailing list