Question about in_channel???
"Douglas Lewit [email protected] [ocaml_beginners]" <[email protected]> Thu, 11 May 2017 04:40:30 -0500
| Newsgroups | gmane.comp.lang.ocaml.beginners |
|---|---|
| Message-ID | <CAM0XMJRU7x1Vv0eP04a4kb9+AD_uBb59Xy_Aq6Cnrr=1vnb+aQ@mail.gmail.com> |
--001a113750e434f432054f3c6173
Content-Type: text/plain; charset=UTF-8
*(* Function to read non-empty lines in any text file in current working
directory. *)*
*let** count_lines **(**file_name **:** string**)* *:** int **=* *let**
read_file **=** open_in file_name **in*
*let* *rec** count_lines_helper **(**input **:**
in_channel**)* *(**accum **:** int**)* *:** int **=*
*try*
*let** sentence **=** input_line read_file **in*
*if** sentence **=* *""* *||** sentence **=*
*"\t"* *||** sentence **=* *"\n"*
*then** count_lines_helper input accum *
*else** count_lines_helper input **(**accum **+*
*1**)*
*with** End_of_file **->** accum *
*in** count_lines_helper read_file **0* *;;*
Hi everyone,
I have a question about the above code. It seems to do a great job of
counting the non-empty lines in a text file. However, at no point in the
program am I able to place a "close_in" command to close the in_channel
value. Isn't that a problem? I mean.... if you open up a file, don't you
have to close it when you're done with it? I think this is more of an
issue when you're writing to a file rather than reading from it, but still
I would like to include that somewhere in my function. The problem is
this. If I do this *End_of_file -> close_in input* then the function's
return type is unit rather than int. I would like to return an int rather
than unit. I suppose I could do this:
*End_of_file --> print_string ((string_of_int accum) ^ "\n") ; close_in
input *
but again the function's return type will be unit rather than int. I'm not
sure how to close the file inside my function and still retain the return
type of int. There's probably a way, but it eludes me. Can someone
inspire me with a solution? Thanks!!!
Oh yes.... one last question. If someone says, "My function's type is int"
and someone else says, "My function's return type is int", do those two
statements mean exactly the same thing? So if a function returns an int
for example, then you could say the function type is int or you could say
the function's return type is int. Is that correct? I know functional
programmers seem to avoid ( as much as possible ) using the word "return".
Honestly, I'm not sure why the word "return" is such a dirty word among
functional programmers. Oh well.... I guess it's just part of the lingo of
the tradition, right?
Thanks for the feedback.
Best,
Douglas.
P.S. Sorry.... but just one last question. I know that OCaml has two
compile commands, "ocamlc" and "ocamlopt". For the most part they are
pretty easy to use. Just follow the documentation in Terminal's man
pages. But lately I've been experimenting with Standard ML, which is
OCaml's ancestor. Definitely a nice language, and very similar to OCaml in
many ways, but.... how on earth are we supposed to compile a .sml file?
I've searched and searched and for the most part I have only found
instructions and tutorials on how to use SML's REPL. The REPL is nice, but
what if I actually want to convert a .sml source file to an executable
file. There must be some way to do that without my having to hunt down the
sacred Minotaur at the center of the maze!
--001a113750e434f432054f3c6173
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm=
l4/strict.dtd">
<html>
<head>
</head>
=20
<body style=3D"background-color: #fff;">
<span style=3D"display:none"> </span>
<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id=3D"ygrp-mlmsg" style=3D"position:relative;">
<div id=3D"ygrp-msg" style=3D"z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->
<div id=3D"ygrp-text" >
=20=20=20=20=20=20
=20=20=20=20=20=20
<p><div dir=3D"ltr">
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s3"><b>(* Funct=
ion to read non-empty lines in any text file in current working directory. =
*)</b></span></font></p><p class=3D"gmail-p1"><font size=3D"4"><span class=
=3D"gmail-s3"><b>let</b></span><span class=3D"gmail-s4"><b> count_lines </b=
></span><span class=3D"gmail-s3"><b>(</b></span><span class=3D"gmail-s4"><b=
>file_name </b></span><span class=3D"gmail-s3"><b>:</b></span><span class=
=3D"gmail-s4"><b> string</b></span><span class=3D"gmail-s3"><b>)</b></span>=
<span class=3D"gmail-s4"><b> </b></span><span class=3D"gmail-s3"><b>:</b></=
span><span class=3D"gmail-s4"><b> int </b></span><span class=3D"gmail-s3"><=
b>=3D</b></span><span class=3D"gmail-s4"><b> </b></span><span class=3D"gmai=
l-s3"><b>let</b></span><span class=3D"gmail-s4"><b> read_file </b></span><s=
pan class=3D"gmail-s3"><b>=3D</b></span><span class=3D"gmail-s4"><b> open_i=
n file_name </b></span><span class=3D"gmail-s3"><b>in</b></span><span class=
=3D"gmail-s4"><b>=C2=A0</b></span></font></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>let</b></span><spa=
n class=3D"gmail-s4"><b> </b></span><span class=3D"gmail-s3"><b>rec</b></sp=
an><span class=3D"gmail-s4"><b> count_lines_helper </b></span><span class=
=3D"gmail-s3"><b>(</b></span><span class=3D"gmail-s4"><b>input </b></span><=
span class=3D"gmail-s3"><b>:</b></span><span class=3D"gmail-s4"><b> in_chan=
nel</b></span><span class=3D"gmail-s3"><b>)</b></span><span class=3D"gmail-=
s4"><b> </b></span><span class=3D"gmail-s3"><b>(</b></span><span class=3D"g=
mail-s4"><b>accum </b></span><span class=3D"gmail-s3"><b>:</b></span><span =
class=3D"gmail-s4"><b> int</b></span><span class=3D"gmail-s3"><b>)</b></spa=
n><span class=3D"gmail-s4"><b> </b></span><span class=3D"gmail-s3"><b>:</b>=
</span><span class=3D"gmail-s4"><b> int </b></span><span class=3D"gmail-s3"=
><b>=3D</b></span><span class=3D"gmail-s4"><b>=C2=A0</b></span></font></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>try</b></span><spa=
n class=3D"gmail-s4"><b>=C2=A0</b></span></font></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>let</b></span><spa=
n class=3D"gmail-s4"><b> sentence </b></span><span class=3D"gmail-s3"><b>=
=3D</b></span><span class=3D"gmail-s4"><b> input_line read_file </b></span>=
<span class=3D"gmail-s3"><b>in</b></span><span class=3D"gmail-s4"><b>=C2=A0=
</b></span></font></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>if</b></span><span=
class=3D"gmail-s4"><b> sentence </b></span><span class=3D"gmail-s3"><b>=3D=
</b></span><span class=3D"gmail-s4"><b> </b></span><span class=3D"gmail-s5"=
><b>""</b></span><span class=3D"gmail-s4"><b> </b></span><span cl=
ass=3D"gmail-s3"><b>||</b></span><span class=3D"gmail-s4"><b> sentence </b>=
</span><span class=3D"gmail-s3"><b>=3D</b></span><span class=3D"gmail-s4"><=
b> </b></span><span class=3D"gmail-s5"><b>"\t"</b></span><span cl=
ass=3D"gmail-s4"><b> </b></span><span class=3D"gmail-s3"><b>||</b></span><s=
pan class=3D"gmail-s4"><b> sentence </b></span><span class=3D"gmail-s3"><b>=
=3D</b></span><span class=3D"gmail-s4"><b> </b></span><span class=3D"gmail-=
s5"><b>"\n"</b></span><span class=3D"gmail-s4"><b>=C2=A0</b></spa=
n></font></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>then</b></span><sp=
an class=3D"gmail-s4"><b> count_lines_helper input accum=C2=A0</b></span></=
font></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>else</b></span><sp=
an class=3D"gmail-s4"><b> count_lines_helper input </b></span><span class=
=3D"gmail-s3"><b>(</b></span><span class=3D"gmail-s4"><b>accum </b></span><=
span class=3D"gmail-s3"><b>+</b></span><span class=3D"gmail-s4"><b> </b=
></span><span class=3D"gmail-s6"><b>1</b></span><span class=3D"gmail-s3"><b=
>)</b></span></font></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>with</b></span><sp=
an class=3D"gmail-s4"><b> End_of_file </b></span><span class=3D"gmail-s3"><=
b>-></b></span><span class=3D"gmail-s4"><b> accum=C2=A0</b></span></font=
></p>
<p class=3D"gmail-p1"><font size=3D"4"><span class=3D"gmail-s4"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 </b></span><span class=3D"gmail-s3"><b>in</b></span><span=
class=3D"gmail-s4"><b> count_lines_helper read_file </b></span><span class=
=3D"gmail-s6"><b>0</b></span><span class=3D"gmail-s4"><b> </b></span><span =
class=3D"gmail-s3"><b>;;</b></span></font></p><p class=3D"gmail-p1"><span c=
lass=3D"gmail-s3"><b><br></b></span></p><p class=3D"gmail-p1"><span class=
=3D"gmail-s3"><font size=3D"4">Hi everyone,</font></span></p><p class=3D"gm=
ail-p1"><span class=3D"gmail-s3"><font size=3D"4"><br></font></span></p><p =
class=3D"gmail-p1"><span class=3D"gmail-s3"><font size=3D"4">I have a quest=
ion about the above code.=C2=A0 It seems to do a great job of counting the =
non-empty lines in a text file.=C2=A0 However, at no point in the program a=
m I able to place a "close_in" command to close the in_channel va=
lue.=C2=A0 Isn't that a problem?=C2=A0 I mean.... if you open up a file=
, don't you have to close it when you're done with it?=C2=A0 I thin=
k this is more of an issue when you're writing to a file rather than re=
ading from it, but still I would like to include that somewhere in my funct=
ion.=C2=A0 The problem is this.=C2=A0 If I do this <b>End_of_file -> clo=
se_in input</b> then the function's return type is unit rather than int=
.=C2=A0 I would like to return an int rather than unit.=C2=A0 I suppose I c=
ould do this:</font></span></p><p class=3D"gmail-p1"><span class=3D"gmail-s=
3"><font size=3D"4"><b>End_of_file --> print_string ((string_of_int accu=
m) ^ "\n") ; close_in input=C2=A0</b></font></span></p><p class=
=3D"gmail-p1"><span class=3D"gmail-s3"><font size=3D"4">but again the funct=
ion's return type will be unit rather than int.=C2=A0 I'm not sure =
how to close the file inside my function and still retain the return type o=
f int.=C2=A0 There's probably a way, but it eludes me.=C2=A0 Can someon=
e inspire me with a solution?=C2=A0 Thanks!!!</font></span></p><p class=3D"=
gmail-p1"><span class=3D"gmail-s3"><font size=3D"4"><br></font></span></p><=
p class=3D"gmail-p1"><span class=3D"gmail-s3"><font size=3D"4">Oh yes.... o=
ne last question.=C2=A0 If someone says, "My function's type is in=
t" and someone else says, "My function's return type is int&q=
uot;, do those two statements mean exactly the same thing?=C2=A0 So if a fu=
nction returns an int for example, then you could say the function type is =
int or you could say the function's return type is int.=C2=A0 Is that c=
orrect?=C2=A0 I know functional programmers seem to avoid ( as much as poss=
ible ) using the word "return".=C2=A0 Honestly, I'm not sure =
why the word "return" is such a dirty word among functional progr=
ammers.=C2=A0 Oh well.... I guess it's just part of the lingo of the tr=
adition, right?</font></span></p><p class=3D"gmail-p1"><span class=3D"gmail=
-s3"><font size=3D"4"><br></font></span></p><p class=3D"gmail-p1"><span cla=
ss=3D"gmail-s3"><font size=3D"4">Thanks for the feedback.</font></span></p>=
<p class=3D"gmail-p1"><span class=3D"gmail-s3"><font size=3D"4"><br></font>=
</span></p><p class=3D"gmail-p1"><span class=3D"gmail-s3"><font size=3D"4">=
Best,</font></span></p><p class=3D"gmail-p1"><span class=3D"gmail-s3"><font=
size=3D"4"><br></font></span></p><p class=3D"gmail-p1"><span class=3D"gmai=
l-s3"><font size=3D"4">Douglas.</font></span></p><p class=3D"gmail-p1"><spa=
n class=3D"gmail-s3"><font size=3D"4"><br></font></span></p><p class=3D"gma=
il-p1"><span class=3D"gmail-s3"><font size=3D"4">P.S.=C2=A0 Sorry.... but j=
ust one last question.=C2=A0 I know that OCaml has two compile commands, &q=
uot;ocamlc" and "ocamlopt".=C2=A0 For the most part they are=
pretty easy to use.=C2=A0 Just follow the documentation in Terminal's =
man pages.=C2=A0 But lately I've been experimenting with Standard ML, w=
hich is OCaml's ancestor.=C2=A0 Definitely a nice language, and very si=
milar to OCaml in many ways, but.... how on earth are we supposed to compil=
e a .sml file?=C2=A0 I've searched and searched and for the most part I=
have only found instructions and tutorials on how to use SML's REPL.=
=C2=A0 The REPL is nice, but what if I actually want to convert a .sml sour=
ce file to an executable file.=C2=A0 There must be some way to do that with=
out my having to hunt down the sacred Minotaur at the center of the maze!</=
font></span></p><p class=3D"gmail-p1"><span class=3D"gmail-s3"><font size=
=3D"4"><br></font></span></p><p class=3D"gmail-p1"><span class=3D"gmail-s3"=
><font size=3D"4"><br></font></span></p><p class=3D"gmail-p1"><span class=
=3D"gmail-s3"><font size=3D"4"><br></font></span></p></div>
</p>
</div>
=20=20=20=20=20
<!--~-|**|PrettyHtmlStart|**|-~-->
<div style=3D"color: #fff; height: 0;">__._,_.___</div>
=20=20=20=20=20=20=20=20=20=20
=20=20
=20
=20=20=20=20
<div style=3D"clear:both"> </div>
<div id=3D"fromDMARC" style=3D"margin-top: 10px;">
<hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background=
-color:#E3E3E3;">
Posted by: Douglas Lewit <[email protected]> <hr style=
=3D"height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
</div>
<div style=3D"clear:both"> </div>
<table cellspacing=3D4px style=3D"margin-top: 10px; margin-bottom: 10px=
; color: #2D50FD;">
<tbody>
<tr>
<td style=3D"font-size: 12px; font-family: arial; font-weight: bo=
ld; padding: 7px 5px 5px;" >
<a style=3D"text-decoration: none; color: #2D50FD=
" href=3D"https://groups.yahoo.com/neo/groups/ocaml_beginners/conversations=
/messages/14806;_ylc=3DX3oDMTJxZ3J2NWloBF9TAzk3MzU5NzE0BGdycElkAzQ5OTkxOTQE=
Z3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE0ODA2BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQ=
5NDQ5NTYzMg--?act=3Dreply&messageNum=3D14806">Reply via web post</a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
<a href=3D"mailto:[email protected]?subject=3DRe%3A%20Question%=
20about%20in_channel%3F%3F%3F" style=3D"text-decoration: none; color: #2D50=
FD;">
Reply to sender </a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;">
<a href=3D"mailto:[email protected]?subject=3DRe%=
3A%20Question%20about%20in_channel%3F%3F%3F" style=3D"text-decoration: none=
; color: #2D50FD">
Reply to group </a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
<a href=3D"https://groups.yahoo.com/neo/groups/ocaml_beginners/=
conversations/newtopic;_ylc=3DX3oDMTJlYzlicWJ0BF9TAzk3MzU5NzE0BGdycElkAzQ5O=
TkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQ5NDQ5NTYz=
Mg--" style=3D"text-decoration: none; color: #2D50FD">Start a New Topic</a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;color: #2D50FD;" >
<a href=3D"https://groups.yahoo.com/neo/groups/=
ocaml_beginners/conversations/topics/14806;_ylc=3DX3oDMTM2Z2tlZjk3BF9TAzk3M=
zU5NzE0BGdycElkAzQ5OTkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE0ODA2BHNlYwNm=
dHIEc2xrA3Z0cGMEc3RpbWUDMTQ5NDQ5NTYzMgR0cGNJZAMxNDgwNg--" style=3D"text-dec=
oration: none; color: #2D50FD;">Messages in this topic</a>
(1)
</td>
</tr>
</tbody>
</table>
=20=20=20=20=20=20=20=20
<div id=3D"megaphoneModule">
<hr style=3D"height:2px ; border-width:0; color:#E3E3E3; backgr=
ound-color:#E3E3E3;">
<div>
<div class=3D"stream" style=3D"margin-bottom:10px;">
<div style=3D"background-color:white;">
<div class=3D"sn-img" style=3D"display:inline;"><img name=3D"tn=
_file" style=3D"padding:0px 10px;vertical-align:top;margin-top:5px;" src=3D=
"https://s.yimg.com/ru/static/images/yg/img/megaphone/1464031581_phpFA8bON"=
height=3D"82" width=3D"82"></div>
<div class=3D"mod-txt" style=3D"display:inline-block;">
<a rel=3D"nofollow" name=3D"sub_url" target=3D"_blank" href=
=3D"https://yho.com/1wwmgg" style=3D"color:#0000FF;display:block;margin-lef=
t:5px;text-decoration:none;"><span style=3D"font-size:15px;">Have you tried=
the highest rated email app?</span></a>
<div style=3D"max-width:530px;padding:2px 5px;">With 4.5 st=
ars in iTunes, the Yahoo Mail app is the highest rated email app on the mar=
ket. What are you waiting for? Now you can access all your inboxes (Gmail, =
Outlook, AOL and more) in one place. Never delete an email again with 1000G=
B of free cloud storage.</div>
</div>
</div>
</div> </div>=20=20
=20=20=20=20=20
<hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background-col=
or:#E3E3E3;">
</div>
<!------- Start Nav Bar ------>
<div id=3D"ygrp-grfd" style=3D"font-family: Verdana; font-size: 12px; p=
adding: 15px 0;">
=20=20=20=20=20=20
<!-- |**|begin egp html banner|**| -->
Archives up to December 31, 2011 are also downloadable at <a href=3D"=
http://www.connettivo.net/cntprojects/ocaml_beginners">http://www.connettiv=
o.net/cntprojects/ocaml_beginners</a><BR>
The archives of the very official ocaml list (the seniors' one) can be foun=
d at <a href=3D"http://caml.inria.fr">http://caml.inria.fr</a><BR>
Attachments are banned and you're asked to be polite, avoid flames etc. =
=20=20
<!-- |**|end egp html banner|**| -->
</div>
=20=20
=20
<!-- |**|begin egp html banner|**| -->
<div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-family: Ver=
dana; font-size: 10px; margin-bottom: 10px; padding: 10px;">
<span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-transf=
orm: uppercase; "><a href=3D"https://groups.yahoo.com/neo/groups/ocaml_begi=
nners/info;_ylc=3DX3oDMTJlMmE4YXNkBF9TAzk3MzU5NzE0BGdycElkAzQ5OTkxOTQEZ3Jwc=
3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ5NDQ5NTYzMg--" style=
=3D"text-decoration: none;">Visit Your Group</a></span>
<ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in=
line;">
</ul>
</div>
<div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p=
x; padding: 0 2px 0 0; clear: both;">
<a href=3D"https://groups.yahoo.com/neo;_ylc=3DX3oDMTJkYzMzanQ2BF9TAzk3ND=
c2NTkwBGdycElkAzQ5OTkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNDk0NDk1NjMy" style=3D"float: left;"><img src=3D"http://l.yimg.com/r=
u/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15"=
width=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a>
<div style=3D"color: #747575; float: right;"> • <a href=3D"https://i=
nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio=
n: none;">Privacy</a> • <a href=3D"mailto:ocaml_beginners-unsubscribe@=
yahoogroups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Uns=
ubscribe</a> • <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/t=
erms/" style=3D"text-decoration: none;">Terms of Use</a> </div>
</div>
<br>
<!-- |**|end egp html banner|**| -->
</div> <!-- ygrp-msg -->
=20
<!-- Sponsor -->
<!-- |**|begin egp html banner|**| -->
<div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m=
argin:0 0 25px 0; background: #fff;">
<!-- Start Recommendations -->
<div id=3D"ygrp-reco">
</div>
<!-- End Recommendations -->
</div> <!-- |**|end egp html banner|**| -->
<div style=3D"clear:both; color: #FFF; font-size:1px;">.</div>
</div>
<img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D4999194/grpspI=
d=3D1705006764/msgId=3D14806/stime=3D1494495632" width=3D"1" height=3D"1"> =
<br>
<img src=3D"http://y.analytics.yahoo.com/fpc.pl?ywarid=3D515FB27823A7407E&a=
=3D10001310322279&js=3Dno&resp=3Dimg&cf12=3DCP" width=3D"1" height=3D"1">=20
<div style=3D"color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</body>
<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
<style type=3D"text/css">
<!--
#ygrp-mkp {
border: 1px solid #d8d8d8;
font-family: Arial;
margin: 10px 0;
padding: 0 10px;
}
#ygrp-mkp hr {
border: 1px solid #d8d8d8;
}
#ygrp-mkp #hd {
color: #628c2a;
font-size: 85%;
font-weight: 700;
line-height: 122%;
margin: 10px 0;
}
#ygrp-mkp #ads {
margin-bottom: 10px;
}
#ygrp-mkp .ad {
padding: 0 0;
}
#ygrp-mkp .ad p {
margin: 0;
}
#ygrp-mkp .ad a {
color: #0000ff;
text-decoration: none;
}
#ygrp-sponsor #ygrp-lc {
font-family: Arial;
}
#ygrp-sponsor #ygrp-lc #hd {
margin: 10px 0px;
font-weight: 700;
font-size: 78%;
line-height: 122%;
}
#ygrp-sponsor #ygrp-lc .ad {
margin-bottom: 10px;
padding: 0 0;
}
#actions {
font-family: Verdana;
font-size: 11px;
padding: 10px 0;
}
#activity {
background-color: #e0ecee;
float: left;
font-family: Verdana;
font-size: 10px;
padding: 10px;
}
#activity span {
font-weight: 700;
}
#activity span:first-child {
text-transform: uppercase;
}
#activity span a {
color: #5085b6;
text-decoration: none;
}
#activity span span {
color: #ff7900;
}
#activity span .underline {
text-decoration: underline;
}
.attach {
clear: both;
display: table;
font-family: Arial;
font-size: 12px;
padding: 10px 0;
width: 400px;
}
.attach div a {
text-decoration: none;
}
.attach img {
border: none;
padding-right: 5px;
}
.attach label {
display: block;
margin-bottom: 5px;
}
.attach label a {
text-decoration: none;
}
=20=20
blockquote {
margin: 0 0 0 4px;
}
.bold {
font-family: Arial;
font-size: 13px;
font-weight: 700;
}
.bold a {
text-decoration: none;
}
dd.last p a {
font-family: Verdana;
font-weight: 700;
}
dd.last p span {
margin-right: 10px;
font-family: Verdana;
font-weight: 700;
}
dd.last p span.yshortcuts {
margin-right: 0;
}
div.attach-table div div a {
text-decoration: none;
}
div.attach-table {
width: 400px;
}
div.file-title a, div.file-title a:active, div.file-title a:hover, div.fi=
le-title a:visited {
text-decoration: none;
}
div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div=
.photo-title a:visited {
text-decoration: none;
}
div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
font-family: Verdana;
font-size: 10px;
font-weight: normal;
}
.green {
color: #628c2a;
}
.MsoNormal {
margin: 0 0 0 0;
}
o {
font-size: 0;
}
#photos div {
float: left;
width: 72px;
}
#photos div div {
border: 1px solid #666666;
height: 62px;
overflow: hidden;
width: 62px;
}
#photos div label {
color: #666666;
font-size: 10px;
overflow: hidden;
text-align: center;
white-space: nowrap;
width: 64px;
}
#reco-category {
font-size: 77%;
}
#reco-desc {
font-size: 77%;
}
.replbq {
margin: 4px;
}
#ygrp-actbar div a:first-child {
/* border-right: 0px solid #000;*/
margin-right: 2px;
padding-right: 5px;
}
#ygrp-mlmsg {
font-size: 13px;
font-family: Arial, helvetica,clean, sans-serif;
*font-size: small;
*font: x-small;
}
#ygrp-mlmsg table {
font-size: inherit;
font: 100%;
}
#ygrp-mlmsg select, input, textarea {
font: 99% Arial, Helvetica, clean, sans-serif;
}
#ygrp-mlmsg pre, code {
font:115% monospace;
*font-size:100%;
}
#ygrp-mlmsg * {
line-height: 1.22em;
}
#ygrp-mlmsg #logo {
padding-bottom: 10px;
}
#ygrp-msg p a {
font-family: Verdana;
}
#ygrp-msg p#attach-count span {
color: #1E66AE;
font-weight: 700;
}
#ygrp-reco #reco-head {
color: #ff7900;
font-weight: 700;
}
#ygrp-reco {
margin-bottom: 20px;
padding: 0px;
}
#ygrp-sponsor #ov li a {
font-size: 130%;
text-decoration: none;
}
#ygrp-sponsor #ov li {
font-size: 77%;
list-style-type: square;
padding: 6px 0;
}=20
#ygrp-sponsor #ov ul {
margin: 0;
padding: 0 0 0 8px;
}
#ygrp-text {
font-family: Georgia;
}
#ygrp-text p {
margin: 0 0 1em 0;
}
#ygrp-text tt {
font-size: 120%;
}
#ygrp-vital ul li:last-child {
border-right: none !important;=20
}=20
-->
</style>
</head>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->
--001a113750e434f432054f3c6173--