Johan,
There's nothing wrong with the function or Poly/ML or SML/NJ's implementation. I think the difficulty you are having has to do with differences in way Poly/ML and SML/NJ handle their read-eval-print loops and the interaction between this and TextIO. From your previous message to me it was clear that you are running this interactively. If you type
askName();
followed by a carriage return to Poly/ML the read-eval-print loop reads up to and including the semicolon, leaving the newline introduced by the carriage return in the buffer. Your call to TextIO.inputLine then reads this. The next line you type then goes to Poly/ML.

A quick experiment with SML/NJ shows that it does things slightly differently. It seems to read the whole line into its own buffer and then compile parts of it. You can see the difference with

Poly/ML
> askName(); fred;
val it = SOME " fred;": string option
joe;
Error-Value or constructor (joe) has not been declared Found near joe
Static Errors

SML/NJ
- askName(); fred;
joe;
val it = SOME "joe;" : string option
stdIn:12.12-12.16 Error: unbound variable or constructor: fred

The handling of the read-eval-print loop is not standardised so different compilers can perfectly legitimately implement this differently. If you have two programs both reading the same stream you need to be clear on exactly what they are doing.

David

Johan wrote:
Hello,
I am trying to learn SML, but drowning in its streams.

The following function does what I want in SML/NJ, but not in PolySML.
Is the function wrong, but SML/NJ lenient and PolySML not? If the function is wrong, what is the best way to get input from stdin without a newline?
fun askName () =
let val a = TextIO.inputLine TextIO.stdIn
  val b = String.translate (fn x => case x of #"\n" => ""|_ => str(x))
in
  case a of
     SOME("\n")    =>  NONE
  |  SOME(s) =>  SOME (b s)
  |  NONE    =>  NONE
end


Thanks
Johan



_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml
_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to