Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: fauque@enst-bretagne.fr (Fauque UPS)
To: Jocelyn.Serot@lasmea.univ-bpclermont.fr, caml-list@margaux.inria.fr
Subject: Re:  curried fns
Date: Mon, 20 Nov 1995 21:32:33 +0100	[thread overview]
Message-ID: <199511202032.AA39080@melimelo.enst-bretagne.fr> (raw)



I am not a caml expert and the gurus will say if I am wrong, but this
is what I understand:

> Could someone please explain the difference(s) between:
>
>	let f x = function y -> y + x;;
>
> and
>
>	let f x y = y + x;;

there is absolutely no differences between these two expressions: y+x will
be evaluated only when two arguments x and y are given to f.

> Both have the same type (int -> int -> int) but they seem to behave
> distinctly wrt evaluation strategy.
> 
> For instance, if i use the 1st form and write:
> 
> 	let h x = let z = fact x in fun y -> y + z;;
> 	map (h 30) [1;2;3];; (* note 1 *)
> 
> fact 30 gets evaluated only once (partial evaluation), while
> the use of the 2nd form for the h function:
> 
> 	let h x y = let z = fact x in y + z;;
> 	map (h 30) [1;2;3];;
>  
> causes fact 30 to be evaluated _for each_ element of the list.

this is not the same case: the first form should have been:

   let h x = fun y -> let z = fact x in y + z;;

and here fact 30 will be evaluated for each element of the list;
you have done in fact an optimization by putting the fact x before
the fun y ->   and it lets caml compute the fact x without the need
to know the actual value of y.

Hubert Fauque
hubert.fauque@enst-bretagne.fr




             reply	other threads:[~1995-11-21 10:50 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-11-20 20:32 Fauque UPS [this message]
  -- strict thread matches above, loose matches on Subject: below --
1995-11-21  5:17 Tarizzo Martial
1995-11-20 18:51 Laurent CHENO
1995-11-20 15:54 Jocelyn Serot
1995-11-20 18:06 ` John Harrison
1995-11-21 10:48   ` Pierre Weis

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=199511202032.AA39080@melimelo.enst-bretagne.fr \
    --to=fauque@enst-bretagne.fr \
    --cc=Jocelyn.Serot@lasmea.univ-bpclermont.fr \
    --cc=caml-list@margaux.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