Re: curried fns
 fauque@e...
[
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:  fauque@e... 
Subject:  Re: curried fns 
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@enstbretagne.fr