From: Dustin Sallings <dustin@spy.net>
To: Tyler Eaves <tyler@ml1.net>
Cc: Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] Frustrated Beginner
Date: Mon, 22 Dec 2003 22:53:30 -0800 [thread overview]
Message-ID: <B7F72AE6-3514-11D8-A8F7-000393CB0F1E@spy.net> (raw)
In-Reply-To: <EAEE2FF2-3510-11D8-B3A1-000A9584A16E@ml1.net>
On Dec 22, 2003, at 22:26, Tyler Eaves wrote:
(I'm sending this back to the list because, as you pointed out, there
were a few problems with that example, so here's one for the archives).
> Okay, so far so good. I take it that in O'Caml the overhead of a
> function call is much less than in, say, C? Otherwise this approach
> would seem to be rather inefficient.
Well, the short answer is that that's not a function call. :) See
tail-recursion.
It's also not the best example since it was so simple and didn't
return anything useful. Consider this implementation of fold (roughly
translating it in this email from a scheme version I wrote on my palm):
let rec fold f init lst =
match lst with
[] -> init
| h::t -> fold f (f init h) t
;;
If you're not familiar with fold, here's an example:
fold (fun v c -> c + v) 0 [1;2;3;4;5;6;7;8;9;10]
That invocation returns 55. Basically, the function is called for
each value in the list (v) and the current value is passed in along
with the current value during the calculation (c). When it gets to the
end (list is []), you return the init value. Otherwise, you apply the
function.
Note that this function could also be written as follows (and probably
would be):
let rec fold f init = function
[] -> init
| h::t -> fold f (f init h) t
;;
> Would not Stream.iter be worth considering here? I found that when
> looking at at the Stream doc.
Absolutely. I haven't typically used streams that way. How 'bout a
rewrite:
let f = open_in Sys.argv.(1) in
(* Loop on this stream *)
Stream.iter (function
'\t' -> print_string " - tab - "
| c -> print_char c
) (Stream.of_channel f);
close_in f
>> (* The previous statement had a sem because it's an imperative
>> style here *)
>> close_in f
> Will this close EVER be reached? I see only two possibilities, either
> the stream eventually EOFs, or we've hit an 'infinite' file, such as
> /dev/random
Good catch. :) I think that was another example of using streams a
bit different from how I usually do, but bad examples are worse than no
examples. Or maybe it was one of those ``find the bug'' assignments.
:)
--
SPY My girlfriend asked me which one I like better.
pub 1024/3CAE01D5 1994/11/03 Dustin Sallings <dustin@spy.net>
| Key fingerprint = 87 02 57 08 02 D0 DA D6 C8 0F 3E 65 51 98 D8 BE
L_______________________ I hope the answer won't upset her. ____________
-------------------
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
next prev parent reply other threads:[~2003-12-23 6:53 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-23 4:03 Tyler Eaves
2003-12-23 4:19 ` jayanta nath
2003-12-23 5:34 ` Matt Gushee
2003-12-23 6:11 ` Tyler Eaves
2003-12-23 6:21 ` Michael Vanier
2003-12-23 6:31 ` Michael Jeffrey Tucker
2003-12-23 12:16 ` Richard Jones
2003-12-23 20:23 ` Dustin Sallings
2003-12-23 6:32 ` Shawn Wagner
2003-12-23 6:43 ` Matt Gushee
2003-12-23 5:58 ` Dustin Sallings
[not found] ` <EAEE2FF2-3510-11D8-B3A1-000A9584A16E@ml1.net>
2003-12-23 6:53 ` Dustin Sallings [this message]
2003-12-23 7:23 ` Tyler Eaves
2003-12-23 8:26 ` Dustin Sallings
2003-12-23 6:20 ` Tom Murray
2003-12-23 8:52 ` Stefano Zacchiroli
2003-12-23 16:47 ` [Caml-list] Ocaml syntax David Brown
2003-12-23 20:19 ` Dustin Sallings
2003-12-23 21:03 ` Eric Merritt
2003-12-23 21:52 ` brogoff
2003-12-24 10:27 ` skaller
2003-12-24 11:42 ` Peter Jolly
2003-12-24 12:19 ` skaller
2003-12-30 8:14 ` dmitry grebeniuk
2003-12-30 17:48 ` David Brown
2003-12-23 10:26 ` [Caml-list] Frustrated Beginner Samuel Lacas
2003-12-23 11:01 ` Dustin Sallings
2003-12-23 14:34 ` Oleg Trott
2003-12-23 20:25 ` Dustin Sallings
2003-12-23 16:11 ` Brian Hurt
2003-12-23 16:20 ` Sven Luther
2003-12-23 16:52 ` David Brown
2003-12-23 20:32 ` Dustin Sallings
2003-12-24 10:41 ` Issac Trotts
2003-12-23 17:39 ` Brian Hurt
2003-12-24 9:35 ` Jacques Garrigue
2003-12-24 9:49 ` 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=B7F72AE6-3514-11D8-A8F7-000393CB0F1E@spy.net \
--to=dustin@spy.net \
--cc=caml-list@inria.fr \
--cc=tyler@ml1.net \
/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