如何在SML语言中读取用户键盘上的字符串?

问题描述 投票:0回答:1

我是SML语言的新手,我想这样做。

  • 问一个人 "你的全名是什么?"
  • 从用户的键盘上得到答案
  • 并写上 "您的全名是 "+姓名(他或她的回答的名字)。
sml smlnj
1个回答
1
投票

这个答案有三个部分。第一部分回答了你唯一的问题。第二部分回答了你似乎在钓鱼而没有提出的问题,第三部分解决的是如何通过自己的方法找到问题的答案。

如何用SML语言从用户键盘上读取字符串?

你使用 TextIO.inputLine TextIO.stdIn:

- val wat = TextIO.inputLine TextIO.stdIn;
Hello, World!
val wat = SOME "Hello, World!\n" : string option

请注意,这在我的PolyML REPL中实际上是行不通的(也就是 "顶层 "或 "提示"),但在我的SMLNJ和Moscow ML REPL中是行得通的,但它可能在你编译或运行的.sml文件中也行得通。

注意,你也会得到行中断。也许你不想要这个。


虽然你没有问,但你可以用同样的方法打印一个字符串。

- TextIO.output (TextIO.stdOut, Option.valOf wat);
Hello, World!
val it = () : unit

这里的问题是,当你从用户那里读到一行时,你可能什么都得不到,这就导致了以下结果 NONE 而不是一个空字符串 (Python 中的预期) 或一个异常 (Java 中的预期)。当你得到一些东西的时候,为了区分得到一个空的响应和没有得到响应,你得到的是 SOME "...".

如果你不在乎这种区别,你也可以让生活变得更简单,建立一些帮助函数。

(* helper functions *)
fun getLine () =
  Option.getOpt (TextIO.inputLine TextIO.stdIn, "")

fun putLine s =
  TextIO.output (TextIO.stdOut, s)

(* examples of use *)
val wat = getLine ()
val _ = putLine (wat ^ "!!!")

当你想问类似的问题时,你可以自己找到一些答案,通过键入 open TextIO; 进入 中的REPL。这告诉你 什么 函数在TextIO模块里面是有的,但不一定是做什么的。所以你能做的也是通过上网查文档。

https:/smlfamily.github.ioBasistext-io.html。

© www.soinside.com 2019 - 2024. All rights reserved.