Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Jon Harrop <jon@jdh30.plus.com>
To: caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] C++ STL and template features compared with OCaml parametric polymorphism and OO features
Date: Sun, 26 Sep 2004 19:51:52 +0100	[thread overview]
Message-ID: <200409261951.52609.jon@jdh30.plus.com> (raw)
In-Reply-To: <1096209379.28613.64.camel@pelican.wigram>

On Sunday 26 September 2004 15:36, skaller wrote:
> On Sun, 2004-09-26 at 23:05, Jon Harrop wrote:
> >  If you have HOFs, you
> > just write my "sum" function and get on with something more interesting.
>
> Nope. That only works for a limited class algorithms.
> Try a map function.. woops, you can't type it .. :)

Yes you can:

# let vec_add map2 = map2 ( +. );;
val vec_add : ((float -> float -> float) -> 'a) -> 'a = <fun>

So you can then do:

# let list_add = vec_add List.map2;;
val list_add : float list -> float list -> float list = <fun>

I think you're thinking of a function to convert between 'a and 'b container 
types. This can be achieved in general by folding an insertion function using 
the fold of the input container and the insertion of the output container. As 
I've said recently, doing this in the completely generic case buys you 
nothing but writing *_of or of_* functions does, for example a list_of 
function which accepts a fold and container of any type:

# let cons h t = h::t;;
val cons : 'a -> 'a list -> 'a list = <fun>
# let list_of fold_right c = fold_right cons c [];;
val list_of : (('a -> 'a list -> 'a list) -> 'b -> 'c list -> 'd) -> 'b -> 'd 
= <fun>

Then you have:

# let list_of_array a = list_of Array.fold_right a;;
val list_of_array : 'a array -> 'a list = <fun>

> This is somehow like the covariance problem: things
> kind of work for one variable by cheating, but once
> you have several it fails.

You mean there is a trade-off of functionality between more- and less-capable 
type systems?

> Accumulate can accept a function object argument.
> C++ DOES have higher order functions.

That statement is so HOF-definition dependent that it boils down to "C++ is 
Turing complete".

> Ocaml run time can also support polymorphic higher
> order functions -- but the type system as of
> Ocaml 3.04 could not. 3.08 can support them with
> the same problem as C++: messy housekeeping
> is required -- you have to put them in a record
> or class. [This is not so good because records
> and variants are generative/nominally typed like C++ classes
> .. Ocaml classes are actually algebraic .. LOL!]

I don't follow. List.fold_left is a polymorphic HOF that's been around for 
donkey's years, AFAIK.

> Sure but Ocaml offers other advantages such as type inference
> lacking in C++ that make code more concise -- as well
> as nice scoping constructs, lexical scoping, higher
> order functions, variants, and garbage collection.
> [Did I miss something .. ? :]

Good looking programmers.

Cheers,
Jon.

-------------------
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


  parent reply	other threads:[~2004-09-26 18:56 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-25 21:12 Vasili Galchin
2004-09-25 21:38 ` Nicolas Cannasse
2004-09-25 22:15   ` Vasili Galchin
2004-09-25 22:52     ` Vasili Galchin
2004-09-26  1:34       ` Jon Harrop
2004-09-26  5:31         ` Radu Grigore
2004-09-26  9:47           ` sejourne_kevin
2004-09-26 13:05           ` Jon Harrop
2004-09-26 14:36             ` skaller
2004-09-26 15:08               ` sejourne_kevin
2004-09-26 15:27                 ` skaller
2004-09-26 18:51               ` Jon Harrop [this message]
2004-09-26 20:14                 ` Radu Grigore
2004-09-27  1:59                   ` Jon Harrop
2004-09-27  4:48                     ` skaller
2004-09-27  9:40                       ` Jacques GARRIGUE
2004-09-27 10:50                     ` Radu Grigore
2004-09-27 12:14                       ` skaller
2004-09-27 13:11                       ` Jon Harrop
2004-09-27 13:31                         ` Radu Grigore
2004-09-27 16:54                           ` Jon Harrop
2004-09-29 18:59                             ` Radu Grigore
2004-09-27 13:32                         ` Radu Grigore
2004-09-27 14:04                         ` Brian Hurt
2004-09-27 14:58                           ` skaller
2004-09-27 15:30                             ` Brian Hurt
2004-09-27 16:38                               ` skaller
2004-09-27 17:01                                 ` Brian Hurt
2004-09-28  1:21                                   ` skaller
2004-09-27 16:41                           ` brogoff
2004-09-28  0:26                             ` skaller
2004-09-29 15:32                         ` Florian Hars
2004-09-29 16:49                           ` [Caml-list] Factoring HOFs [was Re: C++ STL...] Jon Harrop
2004-09-30  9:19                             ` Radu Grigore
2004-09-30 10:13                             ` Keith Wansbrough
2004-09-30 10:31                               ` Keith Wansbrough
2004-09-30 13:21                               ` skaller
2004-09-30 23:17                               ` [Caml-list] Factoring HOFs Jacques Garrigue
2004-10-01  8:46                                 ` Keith Wansbrough
2004-10-01 17:35                                 ` brogoff
2004-09-26 20:43                 ` [Caml-list] C++ STL and template features compared with OCaml parametric polymorphism and OO features skaller
2004-09-26 14:19           ` skaller

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=200409261951.52609.jon@jdh30.plus.com \
    --to=jon@jdh30.plus.com \
    --cc=caml-list@inria.fr \
    /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