old*_*959 -1 arrays algorithm functional-programming sml smlnj
我正在尝试使用命令式和功能性概念构建标准ML程序,并将内容写入文件.但我的while循环似乎没有终止,而是连续打印相同的值.
fun writeImage image filename =
let val ap = TextIO.openOut filename
val (w,h) = size image
val row = ref 0
val stringToWrite = "";
in
while !row < h do
TextIO.output(ap,"A");
row := !row + 1;
TextIO.closeOut ap
end;
Run Code Online (Sandbox Code Playgroud)
如果我在while循环之后删除第一行,则循环终止.但如果我包括TextIO.output(ap,"A");,它就没有.为什么会这样?
让我们用正确的缩进编写你的程序,然后变得清楚错误在哪里:
...
while !row < h do
TextIO.output(ap,"A");
row := !row + 1;
TextIO.closeOut ap
...
Run Code Online (Sandbox Code Playgroud)
你永远循环,因为增量在循环体外.
你打算写这个:
...
while !row < h do (
TextIO.output(ap,"A");
row := !row + 1
);
TextIO.closeOut ap
...
Run Code Online (Sandbox Code Playgroud)
对?
我一直在研究人们在编程时如何犯错误.我很想知道你是怎么来犯这个错误的.如果你认为那种;结合力强于while那么你为什么认为它TextIO.closeOut ap是在循环之后呢?当然,如果你的信念是;将增量绑定到循环,那么;它也应该将它绑定到循环.您是否认为ML是一种像Python这样的语言,其中循环结构使用空格作为身体范围的指南?
你对;ML的一般信念是什么?你认为;它是一个语句终止符,因为它是用C语言编写的吗?或者你认为它是副作用表达式的中缀排序操作?
您的思考过程是什么,工具如何让您更轻松地解决问题而无需寻求帮助?