【发布时间】:2014-09-18 18:54:53
【问题描述】:
我是 SML 的新手(实际上是编程)。
fun readlist (infile : string) =
let
val
ins = TextIO.openIn infile
fun loop ins =
case TextIO.inputLine ins of
SOME line => line :: loop ins
| NONE => []
in
loop ins before TextIO.closeIn ins
end ;
这是我在这里遇到的一个程序。 SOME和NONE怎么用,'before'怎么用?
【问题讨论】:
-
以你目前的水平,你最好通过阅读教程来学习SML。阅读程序并询问您遇到的每个您不理解的单词不会有效地利用任何人的时间。试试homepages.inf.ed.ac.uk/stg/NOTES/notes.pdf(谷歌搜索“SML教程”时的第一个链接)
-
您应该查找“选项”数据类型以了解有关您的问题的更多信息。
-
@PascalCuoq 我看到的是一个人看过一个程序,该程序做了一些非常实用的事情——从文件中获取数据——并试图了解它在做什么。不幸的是,您链接到的 Programming in Standard ML '97: A Tutorial Introduction 假设读者已经了解
option结构,即第一次使用是 “来自 Bool 的结果。 fromString 函数要么是 NONE 要么是 SOME b" 因为教程假设有 C 经验:例如"一个熟悉的用于处理文件的 C 编程隐喻可以在标准 ML 中轻松实现。" -
@benrudgers 我并不是说可用的 ML 教程没有问题。我选择了第一个,因为如果一个好的甚至存在的话,我不会区分一个好的和一个坏的。但是在遇到第一个选项类型之前尝试阅读使用
TextIO.openIn的程序不会是一次好的编程学习体验。 -
@PascalCuoq 这是一个很好的教程。但 C 并不是唯一从贝尔实验室出来的语言。有一大类初级程序,从磁盘读取文件可以大大提高效率——在 REPL 中输入数据或在源代码中插入幻数对于调试来说非常有用,但对于数据处理来说通常很麻烦。我知道您的评论如何让互联网变得更好。