在sml中复制文件
我正在尝试学习sml中的输入输出。为了将与在sml中复制文件,sml,smlnj,Sml,Smlnj,我正在尝试学习sml中的输入输出。为了将与s1相同的ls字符串复制到文件l2中,我做了以下操作。我遇到了一些我无法理解的错误。有人能帮我解决吗 fun test(l2:string,ls:string list,s1:string) = if (String.isSubstring(s1 hd(ls))) then (TextIO.openOut l2; TextIO.inputLine hd(ls))::test(l2,tl(ls),s1) el
s1
相同的ls
字符串复制到文件l2
中,我做了以下操作。我遇到了一些我无法理解的错误。有人能帮我解决吗
fun test(l2:string,ls:string list,s1:string) = if (String.isSubstring(s1 hd(ls))) then
(TextIO.openOut l2; TextIO.inputLine hd(ls))::test(l2,tl(ls),s1) else
test(l2,tl(ls),s1);
以下是一些一般提示:
文件名
、行
和行
TextIO.inputLine
将instream
类型的值作为参数TextIO.inputLine hd(ls)
时,实际解释为
(TextIO.inputLine hd)ls
,意思是“将hd
视为流内
,并且
试着从中读一行,把那一行当作函数,
并将其应用于ls
”,这当然完全是胡说八道
在这种情况下,正确的括号应该是TextIO.inputLine(hd ls)
,它
仍然没有意义,因为我们决定ls
是字符串列表
,因此hdls
将是字符串
,而不是流内
(* Open a file, read each line from file and return those that contain mySubstr *)
fun test (filename, mySubstr) =
let val instr = TextIO.openIn filename
fun loop () = case TextIO.inputLine instr of
SOME line => if String.isSubstring mySubstr line
then line :: loop () else loop ()
| NONE => []
val lines = loop ()
val _ = TextIO.closeIn instr
in lines end
您需要使用
TextIO.openOut
和TextIO.output
TextIO.inputLine
是一种从文件中读取数据的程序。这很有帮助,但我不理解val=TextIO.closeIn instr
。我不知道函数可以以()
为参数。你能在这里也谈谈()
吗。听起来你想读一本关于标准ML的书。()
是类型单位的单个值。请去查一下。