Need some advice on how to parse the input the way I want to.
"Douglas Lewit [email protected] [ocaml_beginners]" <[email protected]> Wed, 4 Jan 2017 23:00:53 -0600
| Newsgroups | gmane.comp.lang.ocaml.beginners |
|---|---|
| Message-ID | <CAM0XMJTMAws=x6JahNEevEs59oOQidyi2wDNPH9hPw3ijBtTtA@mail.gmail.com> |
--94eb2c0751bc2dda3a054551c959
Content-Type: text/plain; charset=UTF-8
Merry Christmas and Happy New Year to everyone on the list!
Please look at the following code if you have the time:
(* Build a Christmas tree... using OCaml as our principal tool! *)
(* Compile this and then enter two integer arguments on the command line.
There are some limitations however.
The integers that you enter are going to be treated as ASCII codes,
converted to chars, and then later on converted
to strings. If the integers that you enter do not correspond to valid
ASCII characters, then the program will crash
and return an error or "Failure" message. *)
let gamma = int_of_string Sys.argv.(1) ;;
let delta = int_of_string Sys.argv.(2) ;;
let alpha = min gamma delta ;;
let beta = max gamma delta ;;
let partialsums add initial ls = let rec partial_sums lst accumulator
accumulator_list =
match lst with
|[] -> accumulator_list
|head :: tail -> let accum = add
accumulator head in
partial_sums tail
accum ( accum :: accumulator_list )
in List.rev begin
partial_sums ls initial [] end ;;
let partialsums_strings = partialsums (^) "" ;;
let reverse_string str = let len = String.length str in
let rec reverse_string' str' char_num =
if char_num = -1
then ""
else ( String.make 1 str'.[char_num] ) ^ (
reverse_string' str' ( char_num - 1 ) )
in reverse_string' str ( len - 1 ) ;;
let rec character_string lower upper = if lower > upper then []
else String.make 1 ( Char.chr lower
) :: character_string ( lower + 1 ) upper ;;
let prependSpaces s = let length = String.length s in
let rec addSpaces s' number =
if number <= 0
then s'
else addSpaces ( " " ^ s' ) ( number - 1 ) in
addSpaces s ( ( beta - alpha + 1 ) - length )
;;
let cumulative_alphabet = partialsums_strings begin character_string alpha
beta end ;;
let halfChristmasTree = List.map prependSpaces cumulative_alphabet ;;
let otherHalfOfChristmasTree = List.mapi ( fun i j -> reverse_string (
String.sub j ( String.length j - (i + 1) )
( String.length j - 1 ) ) )
cumulative_alphabet ;;
print_newline () ;;
List.iter ( fun x -> print_endline x; Thread.delay 0.25 )
begin List.map2 ( fun i j -> i ^ j ) halfChristmasTree
otherHalfOfChristmasTree end ;;
print_newline () ;;
I compiled it with:
*ocamlopt unix.cmxa threads.cmxa -thread -o CharacterTriangle
CharacterTriangle.ml*
If you then go to a command line in Terminal ( I use Mac OSX and sometimes
Ubuntu ) and do the following, you'll see a pretty triangle drawn for you
on your standard output.
*./CharacterTriangle 65 90* or alternatively *./CharacterTriangle 97 122*
or alternatively *./CharacterTriangle 48 57*.... there are other
possibilities as well.
But here's my problem. I'm taking the arguments for the program from the
command-line using the *Sys.argv* array. I would have preferred something
along these lines:
*print_string "Enter two integers that represents the lower and upper
limits of your ASCII range? " 65 90 *
*let x = read_int () ;;*
*let y = read_int () ;; *
That was my original implementation but for whatever reason the 65 ( or
some other integer between 0 and 255 ) and 90 ( or some other
ASCII-appropriate value ) did not get parsed. Instead the program just
crashed and returned a "Failure" warning. I suspect it has something to do
with the blank space between the lower value and the upper value. I'm
afraid my knowledge of regular expressions isn't very good, and I
definitely do not know anything about regular expressions using the OCaml
language. Could someone please explain the steps I need to take to change
my program so that the user is prompted to enter both values ( lower limit
and upper limit ) on the same input line as an answer to a prompt?
Thanks in advance! I could really use the help.
I hope that we all have enjoy a wonderful 2017 full of happiness and many
positive gains in our understanding OCaml, the best computer programming
language that's out there!!!!
Warm regards and Happy New Year to everyone.
Best,
Douglas Lewit
P.S. Does anyone know what's up with that OCaml MOOC? I completed all the
exercises and assignments and am still waiting to find out about the
certificate. I sent an email to OCamlPRO asking about my certificate, but
so far there has been no reply from them. If someone knows anything about
this, then please let me know. I worked so hard in that online course, and
it would be nice to have a certificate that provides some documentation of
the effort that I invested in that course. Thanks!!!!
--94eb2c0751bc2dda3a054551c959
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"><font size=3D"4">Merry Christmas and Happy New Ye=
ar to everyone on the list!</font><div><font size=3D"4"><br></font></div><d=
iv><font size=3D"4">Please look at the following code if you have the time:=
</font></div><div><font size=3D"4" color=3D"#073763"><b style=3D"background=
-color:rgb(255,255,0);"><br></b></font></div><div><font size=3D"4" color=3D=
"#073763"><span style=3D"background-color:rgb(255,255,0);"><div style=3D"fo=
nt-weight:bold;">(* Build a Christmas tree... using OCaml as our principal =
tool! *)</div><div style=3D"font-weight:bold;"><br></div><div style=3D"font=
-weight:bold;">(* Compile this and then enter two integer arguments on the =
command line.=C2=A0 There are some limitations however. =C2=A0</div><div st=
yle=3D"font-weight:bold;">=C2=A0 =C2=A0The integers that you enter are goin=
g to be treated as ASCII codes, converted to chars, =C2=A0and then later on=
converted=C2=A0</div><div style=3D"font-weight:bold;">=C2=A0 =C2=A0to stri=
ngs.=C2=A0 If the integers that you enter do not correspond to valid ASCII =
characters, then the program will crash=C2=A0</div><div style=3D"font-weigh=
t:bold;">=C2=A0 =C2=A0and return an error or "Failure" message. *=
)</div><div style=3D"font-weight:bold;"><br></div><div style=3D"font-weight=
:bold;">let gamma =3D int_of_string Sys.argv.(1) ;;</div><div style=3D"font=
-weight:bold;"><br></div><div style=3D"font-weight:bold;">let delta =3D int=
_of_string Sys.argv.(2) ;;</div><div style=3D"font-weight:bold;"><br></div>=
<div style=3D"font-weight:bold;">let alpha =3D min gamma delta ;;</div><div=
style=3D"font-weight:bold;"><br></div><div style=3D"font-weight:bold;">let=
beta =3D max gamma delta ;;</div><div style=3D"font-weight:bold;"><br></di=
v><div style=3D"font-weight:bold;">let partialsums add initial ls =3D let r=
ec partial_sums lst accumulator accumulator_list =3D=C2=A0</div><div style=
=3D"font-weight:bold;">=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0match lst with=C2=A0</div><div style=3D"font-weight:bold;">=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|[] -> accumulator_list=
=C2=A0</div><div style=3D"font-weight:bold;">=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 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|head :: tail -> let accum =3D add accumu=
lator head in</div><div style=3D"font-weight:bold;">=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 =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 =C2=A0 partial_sums tail accum ( accum :: accum=
ulator_list ) =C2=A0</div><div style=3D"font-weight:bold;">=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 =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 in List.rev begin partial_sums ls initial [] en=
d ;;</div><div style=3D"font-weight:bold;"><br></div><div style=3D"font-wei=
ght:bold;">let partialsums_strings =3D partialsums (^) "" ;;</div=
><div style=3D"font-weight:bold;"><br></div><div style=3D"font-weight:bold;=
">let reverse_string str =3D let len =3D String.length str in=C2=A0</div><d=
iv style=3D"font-weight:bold;">=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=A0let rec reverse_string'=
str' char_num =3D=C2=A0</div><div style=3D"font-weight:bold;">=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=A0if char_num =3D -1=C2=A0</div><div style=3D"font-weight:bold;">=
=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=A0then ""</div><div style=3D"font-weight:bold;">=
=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=A0else ( String.make 1 str'.[char_num] ) ^ ( reverse_str=
ing' str' ( char_num - 1 ) )=C2=A0</div><div style=3D"font-weight:b=
old;">=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=A0in reverse_string' str ( len - 1 ) ;;</div><div st=
yle=3D"font-weight:bold;"><br></div><div style=3D"font-weight:bold;">let re=
c character_string lower upper =3D if lower > upper then []=C2=A0</div><=
div style=3D"font-weight:bold;">=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 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0else String.make 1 ( Char.chr lower ) :: character_=
string ( lower + 1 ) upper ;;</div><div style=3D"font-weight:bold;"><br></d=
iv><div style=3D"font-weight:bold;">let prependSpaces s =3D let length =3D =
String.length s in=C2=A0</div><div style=3D"font-weight:bold;">=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let rec =
addSpaces s' number =3D=C2=A0</div><div style=3D"font-weight:bold;">=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 =C2=A0 if number <=3D 0=C2=A0</div><div style=3D"fo=
nt-weight:bold;">=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 =C2=A0 then s'=C2=A0</div><di=
v style=3D"font-weight:bold;">=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 =C2=A0 else addSpaces =
( " " ^ s' ) ( number - 1 ) in=C2=A0</div><div style=3D"font-=
weight:bold;">=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 =C2=A0 addSpaces s ( ( beta - alpha =
+ 1 ) - length ) ;;</div><div style=3D"font-weight:bold;"><br></div><div st=
yle=3D"font-weight:bold;">let cumulative_alphabet =3D partialsums_strings b=
egin character_string alpha beta end ;;</div><div style=3D"font-weight:bold=
;"><br></div><div style=3D"font-weight:bold;">let halfChristmasTree =3D Lis=
t.map prependSpaces cumulative_alphabet ;;</div><div style=3D"font-weight:b=
old;"><br></div><div style=3D"font-weight:bold;">let otherHalfOfChristmasTr=
ee =3D List.mapi ( fun i j -> reverse_string ( String.sub j ( String.len=
gth j - (i + 1) )=C2=A0</div><div style=3D"font-weight:bold;">=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0( String.=
length j - 1 ) ) ) cumulative_alphabet ;;</div><div style=3D"font-weight:bo=
ld;"><br></div><div style=3D"font-weight:bold;">print_newline () ;;</div><d=
iv style=3D"font-weight:bold;"><br></div><div style=3D"font-weight:bold;">L=
ist.iter ( fun x -> print_endline x; Thread.delay 0.25 )=C2=A0</div><div=
style=3D"font-weight:bold;">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 begi=
n List.map2 ( fun i j -> i ^ j ) halfChristmasTree otherHalfOfChristmasT=
ree end ;;</div><div style=3D"font-weight:bold;"><br></div><div style=3D"fo=
nt-weight:bold;">print_newline () ;;</div><div style=3D"font-weight:bold;">=
<br></div><div>I compiled it with:</div><div><b><br></b></div><div><b>ocaml=
opt unix.cmxa threads.cmxa -thread -o CharacterTriangle CharacterTriangle.m=
l</b></div><div><br></div><div>If you then go to a command line in Terminal=
( I use Mac OSX and sometimes Ubuntu ) and do the following, you'll se=
e a pretty triangle drawn for you on your standard output.</div><div><br></=
div><div><b>./CharacterTriangle 65 90</b> =C2=A0or alternatively <b>./Chara=
cterTriangle 97 122</b> or alternatively <b>./CharacterTriangle 48 57</b>..=
.. there are other possibilities as well.</div><div><br></div><div>But here=
's my problem.=C2=A0 I'm taking the arguments for the program from =
the command-line using the <b>Sys.argv</b> array.=C2=A0 I would have prefer=
red something along these lines:</div><div><br></div><div><b>print_string &=
quot;Enter two integers that represents the lower and upper limits of your =
ASCII range? " =C2=A0 65 90 =C2=A0=C2=A0</b></div><div><b><br></b></di=
v><div><b>let x =3D read_int () ;;</b></div><div><b><br></b></div><div><b>l=
et y =3D read_int () ;; =C2=A0=C2=A0</b></div><div><b><br></b></div><div>Th=
at was my original implementation but for whatever reason the 65 ( or some =
other integer between 0 and 255 ) and 90 ( or some other ASCII-appropriate =
value ) did not get parsed.=C2=A0 Instead the program just crashed and retu=
rned a "Failure" warning.=C2=A0 I suspect it has something to do =
with the blank space between the lower value and the upper value.=C2=A0 I&#=
39;m afraid my knowledge of regular expressions isn't very good, and I =
definitely do not know anything about regular expressions using the OCaml l=
anguage.=C2=A0 Could someone please explain the steps I need to take to cha=
nge my program so that the user is prompted to enter both values ( lower li=
mit and upper limit ) on the same input line as an answer to a prompt? =C2=
=A0</div><div><br></div><div>Thanks in advance!=C2=A0 I could really use th=
e help.</div><div><br></div><div>I hope that we all have enjoy a wonderful =
2017 full of happiness and many positive gains in our understanding OCaml, =
the best computer programming language that's out there!!!! =C2=A0=C2=
=A0</div><div><br></div><div>Warm regards and Happy New Year to everyone.</=
div><div><br></div><div>Best,</div><div><br></div><div>Douglas Lewit</div><=
div><br></div><div>P.S.=C2=A0 Does anyone know what's up with that OCam=
l MOOC?=C2=A0 I completed all the exercises and assignments and am still wa=
iting to find out about the certificate.=C2=A0 I sent an email to OCamlPRO =
asking about my certificate, but so far there has been no reply from them.=
=C2=A0 If someone knows anything about this, then please let me know.=C2=A0=
I worked so hard in that online course, and it would be nice to have a cer=
tificate that provides some documentation of the effort that I invested in =
that course.=C2=A0 Thanks!!!!</div><div><br></div><div><br></div></span></f=
ont></div></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/14730;_ylc=3DX3oDMTJxbXAwYzljBF9TAzk3MzU5NzE0BGdycElkAzQ5OTkxOTQE=
Z3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE0NzMwBHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQ=
4MzU5MjQ1NA--?act=3Dreply&messageNum=3D14730">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%20Need%20so=
me%20advice%20on%20how%20to%20parse%20the%20input%20the%20way%20I%20want%20=
to%2E" style=3D"text-decoration: none; color: #2D50FD;">
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%20Need%20some%20advice%20on%20how%20to%20parse%20the%20input%20the%20way=
%20I%20want%20to%2E" 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=3DX3oDMTJldnMxYmVvBF9TAzk3MzU5NzE0BGdycElkAzQ5O=
TkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQ4MzU5MjQ1=
NA--" 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/14730;_ylc=3DX3oDMTM2MWs1c2JzBF9TAzk3M=
zU5NzE0BGdycElkAzQ5OTkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE0NzMwBHNlYwNm=
dHIEc2xrA3Z0cGMEc3RpbWUDMTQ4MzU5MjQ1NAR0cGNJZAMxNDczMA--" 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=3DX3oDMTJlNWdmZ2Q0BF9TAzk3MzU5NzE0BGdycElkAzQ5OTkxOTQEZ3Jwc=
3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ4MzU5MjQ1NA--" 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=3DX3oDMTJkZHRsczFwBF9TAzk3ND=
c2NTkwBGdycElkAzQ5OTkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNDgzNTkyNDU1" 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=3D14730/stime=3D1483592454" 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 -->
--94eb2c0751bc2dda3a054551c959--