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

如何用SML语言从用户键盘读取字符串?,sml,smlnj,Sml,Smlnj,我不熟悉SML语言,我想这样做: 问一个人“你的全名是什么?” 从用户键盘获取答案 写上“你的全名是”+姓名(他或她的名字) 这个答案有三个部分。第一部分回答了你唯一的问题。第二部分回答了一个你似乎没有问过的问题,第三部分讲述了如何通过自己的方式找到问题的答案 如何用SML语言从用户键盘读取字符串 您可以使用TextIO.inputLine TextIO.stdIn: - val wat = TextIO.inputLine TextIO.stdIn; Hello, World! val wa

我不熟悉SML语言,我想这样做:

  • 问一个人“你的全名是什么?”
  • 从用户键盘获取答案
  • 写上“你的全名是”+姓名(他或她的名字)

    • 这个答案有三个部分。第一部分回答了你唯一的问题。第二部分回答了一个你似乎没有问过的问题,第三部分讲述了如何通过自己的方式找到问题的答案

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

      您可以使用
      TextIO.inputLine TextIO.stdIn

      - val wat = TextIO.inputLine TextIO.stdIn;
      Hello, World!
      val wat = SOME "Hello, World!\n" : string option
      
      请注意,这实际上在我的Poly/ML REPL(也称为“顶层”或“提示符”)中不起作用,但它在我的SML/NJ和Moscow ML REPL中都起作用,但它可能在编译或运行的.SML文件中起作用

      还要注意,您也将获得换行符。也许你不想那样


      虽然您没有询问,但您可以使用大致相同的方式打印字符串:

      - TextIO.output (TextIO.stdOut, Option.valOf wat);
      Hello, World!
      val it = () : unit
      
      这里的问题是,当您从用户处读取一行时,可能什么也得不到,这导致值
      NONE
      ,而不是一个空字符串(您在Python中所期望的)或一个异常(您在Java中所期望的)。当你得到一些东西时,为了区分得到的是空响应还是没有响应,你得到了一些“…”

      如果您不在乎这一区别,还可以让生活更轻松,并构建一些帮助器函数:

      (* 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 ^ "!!!")
      

      当你想问类似的问题时,你可以自己键入
      opentextio输入您的回复。这会告诉您TextIO模块中有哪些功能可用,但不一定说明它们的功能。因此,您还可以通过谷歌搜索来查找文档: