19 sep 2012 kl. 18.00 skrev David Matthews:
> The problem is that there may be more than one ML command on a line and there
> has to be a consistent way to deal with it. In my view Poly/ML is consistent
> about this. The compiler reads exactly as many characters as it needs to
> form a valid ML "program" and leaves the input pointer pointing at the next
> character. When the "program" has completed executing the compiled code,
> which may consume further characters from the input, the read-eval-print loop
> returns to the compiler to start compiling ML. Consider the following input:
>
> TextIO.inputLine TextIO.stdIn; 1;
> 2;
>
> With Poly/ML this prints:
> val it = SOME " 1;\n": string option
> val it = 2: int
>
> With SML/NJ it prints
> val it = SOME "2;\n" : string option
> val it = 1 : int
>
> As far as I'm aware the Definition does not describe what should happen here.
No, I don't think so either, but even so would be good for different ML systems
to have the same behaviour.
Also the same ML code *will* behave differently when run interactively or
stand-alone using Poly/ML:
Poly/ML 5.5.0 Release
> fun f() = (print "Say something: "; TextIO.inputLine TextIO.stdIn; print
"Thank you.\n");
val f = fn: unit -> unit
> PolyML.export("test",f);
val it = (): unit
> f();Hello
Say something: Thank you.
val it = (): unit
unix> ./test
Say something: Hello
Thank you.
I believe that the stand-alone behavior is the reasonable one -- it also agrees
with SML/NJ and Moscow ML.
Does this cause problems? Yes, for me it does. We use ML in the introductory
programming course for CS majors and it causes unnecessary complications for
the students.
Lars-Henrik
Lars-Henrik Eriksson, PhD, Senior Lecturer
Computing Science, Dept. of Information Technology, Uppsala University, Sweden
E-mail: [email protected], Web: http://www.it.uu.se/katalog/lhe?lang=en
Phone: +46 18 471 10 57, Mobile: +46 705-36 39 16, Fax: +46 18 51 19 25
_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml