Functional programming 如何在SML中读取文件?

Functional programming 如何在SML中读取文件?,functional-programming,sml,ml,Functional Programming,Sml,Ml,我正在尝试从SML文件中读取文本,但无法使其正常工作。这就是我要尝试的 fun read file = let val inStream = TextIO.openIn file in TextIO.StreamIO.input1 inStream end 实际的函数调用input1并不重要,我只想能够读取文件 您的错误在TextIO.StreamIO.input1中,您的意思很可能是TextIO.input1 如果确实需要/wan使用StreamIO处理文件,则必须使用Te

我正在尝试从SML文件中读取文本,但无法使其正常工作。这就是我要尝试的

fun read file =
let val inStream = TextIO.openIn file

in
        TextIO.StreamIO.input1 inStream
end

实际的函数调用
input1
并不重要,我只想能够读取文件

您的错误在
TextIO.StreamIO.input1
中,您的意思很可能是
TextIO.input1

如果确实需要/wan使用StreamIO处理文件,则必须使用
TextIO.getInstream
函数将
openIN
返回的
instream
类型转换为
StreamIO.instream

您可以在SML Basis库中阅读更多关于这一切的信息

请记住,在完成文件读取后关闭这些文件是一种很好的做法

更新

正如评论中所建议的,您可以阅读整个文件(如果您知道它很小),也可以逐行阅读。

如果你不想一个字一个字地获取内容,最简单的方法就是用空格分割内容。这样,您将得到一个字符串列表,这些字符串表示文件中的每个“单词”。

我认为
TextIO.input1
不正确的原因是它没有列在文本IO签名中。我只想能够逐字读取文本文件。@nosretap:
input1
命令式IO
签名的一部分,该签名包含在
文本IO
中。但是,除非您的文件非常大,否则我宁愿使用
inputAll
并对您得到的字符串进行处理。@nostretap,我不怪您对此感到困惑。basis库并没有使其易于破译。仅此一次,请注意“下面为文本IO提供的签名无效SML[…]”。如果您查看上的MosML文档,可能会获得更多的见解。但是请注意,并不是所有的MosML模块都符合basis库定义(遗憾的是)。这样你就不会把它作为SML/NJ的主要参考了。你知道如何用空格来分割单词吗?是否有特定的api调用,或者我必须编写自己的函数?Thanks@Nosrettap:
String.tokens Char.isSpace“bla bla”
应该可以做到这一点。