From: Jacques Carette <carette@mcmaster.ca>
To: skaller <skaller@users.sourceforge.net>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] how to implement generic operators
Date: Tue, 25 Oct 2005 11:52:09 -0400 [thread overview]
Message-ID: <435E54A9.9060903@mcmaster.ca> (raw)
In-Reply-To: <1130204602.18325.54.camel@rosella>
skaller wrote:
>Do you provide lists directly in the term calculus?
>Or are they just constructed from products and sums?
>
>
Short answer: yes, lists are provided in the term calculus.
Long answer: Maple has no linked lists (ie lists based on nil and
cons). It has "automatically flattened n-tuples" - they are called
"expression sequences". When you see
(a list) [a,b,c]
(a set) {a,b,c}
(a function call) f(a,b,c)
all 3 contain the expression sequence a,b,c. Two additional points:
1) expression sequences (and their contents) are uniquified [ie stored
only once]
2) they are stored in contiguous memory, so that they are more
array-like than list-like
While you may want your term language to support lists, supporting
'flattened' n-tuples can be much simpler from a polymorphism point of
view. The idea here is that a tagged datatype is just a pair tag +
expression sequence, and you can defined all your polymorphic operators
to "map into" the datatype by mapping onto the expression sequence.
Experience shows that this is mightily convenient. And most likely
difficult as all #$%#$% to ``type''.
On the other hand, I was able to reflect this high degree of
polymorphism in parts of my toy interpreter, where I could 'factor' a
lot of my code quite nicely. If only that 'tags' of an algebraic
datatype were also first-class functions in Ocaml [as they are in
Haskell], I would make my code considerably more elegant.
Jacques C.
prev parent reply other threads:[~2005-10-25 15:51 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-24 5:20 skaller
2005-10-24 18:26 ` Ant: [Caml-list] " Martin Chabr
2005-10-25 1:09 ` skaller
2005-10-25 1:56 ` skaller
2005-10-24 19:27 ` Jacques Carette
2005-10-25 1:43 ` skaller
2005-10-25 15:52 ` Jacques Carette [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=435E54A9.9060903@mcmaster.ca \
--to=carette@mcmaster.ca \
--cc=caml-list@yquem.inria.fr \
--cc=skaller@users.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox