Re: Need some advice on how to parse the input the way I want to.

"Douglas Lewit [email protected] [ocaml_beginners]" <[email protected]> Thu, 5 Jan 2017 12:55:49 -0600
Newsgroups gmane.comp.lang.ocaml.beginners
Message-ID <CAM0XMJSnqr6a9YYezJmcYZiZQjvDObEVSeP8ONngvHJqcxgDUw@mail.gmail.com>
--001a114745c423b65805455d7321
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Thanks Gabriel!  I appreciate the help.... so tell me..... when will you
publish your first book on OCaml or make some OCaml tutorial videos?
Seriously, the OCaml community really needs more in the way of books,
videos and better documentation, examples, etc, etc.   When I visit
www.oreilly.com for example I can find dozens of resources on Haskell,
Scala, Java, Python, C, C++, etc, etc, but sadly there is very little
written about OCaml.  I wish that would change in the near future.  Oh well=
.


On Thu, Jan 5, 2017 at 7:27 AM, Gabriel Scherer [email protected]
[ocaml_beginners] <[email protected]> wrote:

>
>
> Another solution is to use:
>
>   let read_blank_int () =3D Scanf.scanf " %d" (fun x -> x)
>
> the space before the %d in the format string means that Scanf will consum=
e
> any whitespace to look for an integer.
>
> On Thu, Jan 5, 2017 at 1:06 AM, Douglas Lewit [email protected]
> [ocaml_beginners] <[email protected]> wrote:
>
>>
>>
>> *Oops!  I think I got it.  Just use Str.split ( Str.regexp " " )  "65 90
>> ".  That should do it!*
>>
>> *Okay, thanks for the help any feedback provided.*
>>
>> *Warm regards,*
>>
>> *Douglas Lewit*
>>
>>
>>
>> On Wed, Jan 4, 2017 at 11:00 PM, Douglas Lewit [email protected]
>> [ocaml_beginners] <[email protected]> wrote:
>>
>>>
>>>
>>> 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 =3D int_of_string Sys.argv.(1) ;;
>>>
>>> let delta =3D int_of_string Sys.argv.(2) ;;
>>>
>>> let alpha =3D min gamma delta ;;
>>>
>>> let beta =3D max gamma delta ;;
>>>
>>> let partialsums add initial ls =3D let rec partial_sums lst accumulator
>>> accumulator_list =3D
>>>                                      match lst with
>>>                                      |[] -> accumulator_list
>>>                                      |head :: tail -> let accum =3D add
>>> accumulator head in
>>>                                                           partial_sums
>>> tail accum ( accum :: accumulator_list )
>>>                                                       in List.rev begin
>>> partial_sums ls initial [] end ;;
>>>
>>> let partialsums_strings =3D partialsums (^) "" ;;
>>>
>>> let reverse_string str =3D let len =3D String.length str in
>>>                          let rec reverse_string' str' char_num =3D
>>>                          if char_num =3D -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 =3D if lower > upper then []
>>>                                        else String.make 1 ( Char.chr
>>> lower ) :: character_string ( lower + 1 ) upper ;;
>>>
>>> let prependSpaces s =3D let length =3D String.length s in
>>>                       let rec addSpaces s' number =3D
>>>                               if number <=3D 0
>>>                               then s'
>>>                               else addSpaces ( " " ^ s' ) ( number - 1 =
)
>>> in
>>>                               addSpaces s ( ( beta - alpha + 1 ) -
>>> length ) ;;
>>>
>>> let cumulative_alphabet =3D partialsums_strings begin character_string
>>> alpha beta end ;;
>>>
>>> let halfChristmasTree =3D List.map prependSpaces cumulative_alphabet ;;
>>>
>>> let otherHalfOfChristmasTree =3D 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 d=
rawn
>>> 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 =3D read_int () ;;*
>>>
>>> *let y =3D 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 t=
o 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 OCa=
ml
>>> language.  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?
>>>
>>> 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 th=
e
>>> 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 ab=
out
>>> 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!!!!
>>>
>>>
>>>
>>
>>
>>
>=20
>

--001a114745c423b65805455d7321
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">&nbsp;</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">Thanks Gabriel!=C2=A0 I apprecia=
te the help.... so tell me..... when will you publish your first book on OC=
aml or make some OCaml tutorial videos?=C2=A0 Seriously, the OCaml communit=
y really needs more in the way of books, videos and better documentation, e=
xamples, etc, etc. =C2=A0 When I visit <a href=3D"http://www.oreilly.com">w=
ww.oreilly.com</a> for example I can find dozens of resources on Haskell, S=
cala, Java, Python, C, C&#43;+, etc, etc, but sadly there is very little wr=
itten about OCaml.=C2=A0 I wish that would change in the near future.=C2=A0=
 Oh well.</font><div><font size=3D"4"><br></font></div></div><div class=3D"=
gmail_extra"><br><div class=3D"gmail_quote">On Thu, Jan 5, 2017 at 7:27 AM,=
 Gabriel Scherer <a href=3D"mailto:[email protected]">gabriel.scher=
[email protected]</a> [ocaml_beginners] <span dir=3D"ltr">&lt;<a href=3D"mailto:=
[email protected]" target=3D"_blank">ocaml_beginners@yahoogro=
ups.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D=
"border-left:1px #ccc solid;">


<u></u>









=20
<div style=3D"background-color:#fff;">
<span>=C2=A0</span>


<div id=3D"m_6449217918407236837ygrp-mlmsg">
  <div id=3D"m_6449217918407236837ygrp-msg">


    <div id=3D"m_6449217918407236837ygrp-text">
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p></p><div dir=3D"ltr"><div><div>Another solution is to use:<br><br>=
</div>=C2=A0 let read_blank_int () =3D Scanf.scanf &quot; %d&quot; (fun x -=
&gt; x)<br><br></div>the space before the %d in the format string means tha=
t Scanf will consume any whitespace to look for an integer.<br></div><div><=
div class=3D"h5"><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">=
On Thu, Jan 5, 2017 at 1:06 AM, Douglas Lewit <a href=3D"mailto:delewit@gma=
il.com" target=3D"_blank">[email protected]</a> [ocaml_beginners] <span dir=
=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_=
blank">ocaml_beginners@yahoogroups.<wbr>com</a>&gt;</span> wrote:<br><block=
quote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;">






=20=20=20=20=20=20=20=20




<div>





<br><br>




<div dir=3D"ltr"><font size=3D"4" color=3D"#20124d"><b>Oops!=C2=A0 I think =
I got it.=C2=A0 Just use Str.split ( Str.regexp &quot; &quot; ) =C2=A0&quot=
;65 90 &quot;.=C2=A0 That should do it!</b></font><div><font size=3D"4" col=
or=3D"#20124d"><b><br></b></font></div><div><font size=3D"4" color=3D"#2012=
4d"><b>Okay, thanks for the help any feedback provided.</b></font></div><di=
v><font size=3D"4" color=3D"#20124d"><b><br></b></font></div><div><font siz=
e=3D"4" color=3D"#20124d"><b>Warm regards,</b></font></div><div><font size=
=3D"4" color=3D"#20124d"><b><br></b></font></div><div><font size=3D"4" colo=
r=3D"#20124d"><b>Douglas Lewit</b></font></div><div><font size=3D"4" color=
=3D"#20124d"><b><br></b></font></div><div><font size=3D"4"><br></font></div=
></div><div><div class=3D"m_6449217918407236837h5"><div class=3D"gmail_extr=
a"><br><div class=3D"gmail_quote">On Wed, Jan 4, 2017 at 11:00 PM, Douglas =
Lewit <a href=3D"mailto:[email protected]" target=3D"_blank">delewit@gmail.=
com</a> [ocaml_beginners] <span dir=3D"ltr">&lt;<a href=3D"mailto:ocaml_beg=
[email protected]" target=3D"_blank">[email protected]<wbr=
>om</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"bor=
der-left:1px #ccc solid;">


<u></u>









=20
<div style=3D"background-color:#fff;">
<span>=C2=A0</span>


<div id=3D"m_6449217918407236837m_5507825689387480420m_-7356845390423939575=
ygrp-mlmsg">
  <div id=3D"m_6449217918407236837m_5507825689387480420m_-73568453904239395=
75ygrp-msg">


    <div id=3D"m_6449217918407236837m_5507825689387480420m_-735684539042393=
9575ygrp-text">
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p></p><div dir=3D"ltr"><font size=3D"4">Merry Christmas and Happy Ne=
w Year to everyone on the list!</font><div><font size=3D"4"><br></font></di=
v><div><font size=3D"4">Please look at the following code if you have the t=
ime:</font></div><div><font size=3D"4" color=3D"#073763"><b style=3D"backgr=
ound-color:rgb(255,255,0);"><br></b></font></div><div><font size=3D"4" colo=
r=3D"#073763"><span style=3D"background-color:rgb(255,255,0);"><div style=
=3D"font-weight:bold;">(* Build a Christmas tree... using OCaml as our prin=
cipal 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 style=3D"font-weight:bold;">=C2=A0 =C2=A0The integers that you enter =
are going 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 strings.=C2=A0 If the integers that you enter do not correspond to va=
lid ASCII characters, then the program will crash=C2=A0</div><div style=3D"=
font-weight:bold;">=C2=A0 =C2=A0and return an error or &quot;Failure&quot; =
message. *)</div><div style=3D"font-weight:bold;"><br></div><div style=3D"f=
ont-weight:bold;">let gamma =3D int_of_string Sys.argv.(1) ;;</div><div sty=
le=3D"font-weight:bold;"><br></div><div style=3D"font-weight:bold;">let del=
ta =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></div><div style=3D"font-weight:bold;">let partialsums add initial ls=
 =3D let rec 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|[] -&gt; accumu=
lator_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 -&gt; let accum =3D add=
 accumulator 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 :=
: 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 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 in List.rev begin partial_sums ls initia=
l [] end ;;</div><div style=3D"font-weight:bold;"><br></div><div style=3D"f=
ont-weight:bold;">let partialsums_strings =3D partialsums (^) &quot;&quot; =
;;</div><div style=3D"font-weight:bold;"><br></div><div style=3D"font-weigh=
t:bold;">let reverse_string str =3D let len =3D String.length str 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=A0let rec reverse_stri=
ng&#39; str&#39; 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:bo=
ld;">=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 &quot;&quot;</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&#39;.[char_num] ) ^ ( reverse_str=
ing&#39; str&#39; ( 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&#39; 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 &gt; 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&#39; 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 &lt;=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&#39;=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 =
( &quot; &quot; ^ s&#39; ) ( 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 -&gt; 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 -&gt; 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 -&gt; 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&#39;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=
&#39;s my problem.=C2=A0 I&#39;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? &quot; =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 &quot;Failure&quot; 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&#39;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&#39;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&#39;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></p>

    </div>
=20=20=20=20=20

=20=20=20=20
    <div style=3D"color:#fff;height:0;"></div>


</div>



=20=20






</div></div></blockquote></div><br></div>






<br>


<br>




<div width=3D"1" style=3D"color:white;"></div>



</div></div></div></blockquote></div><br></div>
</div></div><p></p>

    </div>
=20=20=20=20=20

=20=20=20=20
    <div style=3D"color:#fff;height:0;"></div>


</div>



=20=20






</div></div></blockquote></div><br></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 &lt;[email protected]&gt;        <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/14734;_ylc=3DX3oDMTJxZDc5dHZwBF9TAzk3MzU5NzE0BGdycElkAzQ5OTkxOTQE=
Z3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE0NzM0BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQ=
4MzY0MjU1MQ--?act=3Dreply&messageNum=3D14734">Reply via web post</a>
                      </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
            <a href=3D"mailto:[email protected]?subject=3DRe%3A%20%22ocaml_=
beginners%22%3A%3A%5B%5D%20Need%20some%20advice%20on%20how%20to%20parse%20t=
he%20input%20the%20way%20I%20want%20to%2E" style=3D"text-decoration: none; =
color: #2D50FD;">
               Reply to sender            </a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;">
            <a href=3D"mailto:[email protected]?subject=3DRe%=
3A%20%22ocaml_beginners%22%3A%3A%5B%5D%20Need%20some%20advice%20on%20how%20=
to%20parse%20the%20input%20the%20way%20I%20want%20to%2E" style=3D"text-deco=
ration: none; color: #2D50FD">
              Reply to group            </a>
          </td>
          <td>&bull;</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=3DX3oDMTJlOHEwbnZpBF9TAzk3MzU5NzE0BGdycElkAzQ5O=
TkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQ4MzY0MjU1=
MQ--" style=3D"text-decoration: none; color: #2D50FD">Start a New Topic</a>
          </td>
          <td>&bull;</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=3DX3oDMTM2N2Rja2YyBF9TAzk3M=
zU5NzE0BGdycElkAzQ5OTkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE0NzM0BHNlYwNm=
dHIEc2xrA3Z0cGMEc3RpbWUDMTQ4MzY0MjU1MQR0cGNJZAMxNDczMA--" style=3D"text-dec=
oration: none; color: #2D50FD;">Messages in this topic</a>
                (4)
                      </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=3DX3oDMTJlZ2hjMmIxBF9TAzk3MzU5NzE0BGdycElkAzQ5OTkxOTQEZ3Jwc=
3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ4MzY0MjU1MQ--" 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=3DX3oDMTJkZGNjMDByBF9TAzk3ND=
c2NTkwBGdycElkAzQ5OTkxOTQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNDgzNjQyNTUx" 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;"> &bull; <a href=3D"https://i=
nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio=
n: none;">Privacy</a> &bull; <a href=3D"mailto:ocaml_beginners-unsubscribe@=
yahoogroups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Uns=
ubscribe</a> &bull; <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=3D14734/stime=3D1483642551" 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 -->


--001a114745c423b65805455d7321--