Browse thread
Re: [Caml-list] OCaml compared as a scripting language
-
Hellflame
-
Brian Hurt
- skaller
- sejourne kevin
-
Brian Hurt
[
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: | 2004-06-16 (11:00) |
From: | sejourne kevin <sejourne_kevin@y...> |
Subject: | Re: [Caml-list] OCaml compared as a scripting language |
--- Brian Hurt <bhurt@spnz.org> a écrit : > On Tue, 15 Jun 2004, Hellflame wrote: > An example of this is implicit sideeffects > side-effects- something Perl > does a lot of. This is actually an efficiency in > the small, and it lets > you write quick hacks like (if I recall my Perl > correctly): > while (<>) { > $count += $_; > } > > The equivelent Ocaml code might look something like: > > let sumfile = > let rec loop cnt = > let line, eof = > try > (input_line stdin), false > with > | End_of_file -> "", true > in > if eof then > cnt > else > loop (cnt + (int_of_string line)) > in > loop 0 > ;; > > I just quintupled the lines of code there- 3 lines > to 15 lines. > > But the problem is that Perl get's in brevity (in > part) by sideeffects- it > sets the (effectively) global and widely used $_ > variable. If the code > got modified to: > while (<>) { > do_something(1, 2, 3); > $count += $_; > } files can be see as a kind of data for an iterator. In my personnals libs I have function like : let fold_lefti f x a = let r = ref x in for i = 0 to Array.length a - 1 do r := f i !r a.(i) done; !r ;; let file_fold_left fonction result file = let r = ref result in try while true do r:= fonction !r file done; !r with | End_of_file -> !r ;; ... For the sum I use the second: let sumfile name = let cin = open_in name in let result = file_fold_left (fun r f->r+int_of_string(input_line f)) 0 cin in close_in cin; result ;; and for stdin : let sumstdin = file_fold_left (fun r _->r+(int_of_string (read_line()) ) ) 0 () ;; So if I use my libs ( :-) ) then for the sum in write only 3 lines too. kevin Yahoo! Mail : votre e-mail personnel et gratuit qui vous suit partout ! Créez votre Yahoo! Mail sur http://fr.benefits.yahoo.com/ Dialoguez en direct avec vos amis grâce à Yahoo! Messenger !Téléchargez Yahoo! Messenger sur http://fr.messenger.yahoo.com ------------------- 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