Browse thread
[Caml-list] [ANN] The Missing Library
-
John Goerzen
-
Kenneth Knowles
- Alexander V. Voinov
-
John Goerzen
-
Maxence Guesdon
-
John Goerzen
- Maxence Guesdon
-
John Goerzen
-
Alain.Frisch@e...
-
John Goerzen
-
Alain.Frisch@e...
-
Nicolas Cannasse
-
Yamagata Yoriyuki
- Gerd Stolpmann
-
Nicolas Cannasse
-
Yamagata Yoriyuki
- Jacques GARRIGUE
- Nicolas Cannasse
-
Yamagata Yoriyuki
-
Yamagata Yoriyuki
-
Nicolas Cannasse
- oliver@f...
-
Alain.Frisch@e...
-
John Goerzen
- Henri DF
- Shawn Wagner
- james woodyatt
-
Alain.Frisch@e...
- Basile STARYNKEVITCH
-
John Goerzen
- Kenneth Knowles
- Florian Hars
-
Maxence Guesdon
- Eric C. Cooper
-
Kenneth Knowles
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | skaller <skaller@u...> |
| Subject: | Re: [Caml-list] [ANN] The Missing Library |
On Wed, 2004-04-28 at 21:31, Yaron M. Minsky wrote: > On Wed, 2004-04-28 at 04:24, skaller wrote: > > On Wed, 2004-04-28 at 14:31, Brian Hurt wrote: > > > On Mon, 26 Apr 2004, Martin Berger wrote: > > > > > I'm wondering what concepts Ocaml can't express/enforce? > > > > Iterators. > > Why can't you do this kind of in ocaml? Returning something like a > "next" function would seem to give you a very basic (but usable) > iterator. Which part of the iterator abstraction can't you do? I suggest you try it. I don't know how to answer the question. I think the answer is 'C++ templates provide functorial polymorphism (polyadicity), Ocaml has no such expressive power.' HOF's like 'map' and 'fold' make sense for polynomial data structures -- lists and trees etc. But you have to write 'List.map' or 'Array.map'. There is no single 'map' which works for all data structures in Ocaml. There is in C++, and its a one line idiom: // STL copy for(; i!=e; ++i) *o++ = *i++; Fold is as easy to define (called Accumulate in STL). These definitions are polyadic. They work for ALL data structures -- provided they have iterators of course :D A polyadic 'map' and 'fold' for ML can be defined for polynomial data types (lists, trees etc). I mean, you can easily code it yourself when you need it. Ocaml can't yet automate this: C++ templates have allowed this for some time. The C++ technology isn't sound though. It works, usually, but you can't be sure. I'm no theorist, although I worked on a compiler that implemented functorial polymorphism. Perhaps real theorist can explain better what I'm talking about. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners