Recursion 单位类型的整数列表

Recursion 单位类型的整数列表,recursion,sml,ml,Recursion,Sml,Ml,我正在寻找一个函数:int*int*(int->unit)->unit。我需要这个来打印数字列表。更具体地说,我有一个函数f num=print((Int.toString num)^“\n”)。到目前为止,我有: fun for(from,to,f)= if from=to then [f(to)] else f(from)::for(from+1,to,f) 这给了我一个返回类型单元列表。如何调用函数而不附加到先前的结果 要返回的()是上次调用f的()——也

我正在寻找一个函数
:int*int*(int->unit)->unit
。我需要这个来打印数字列表。更具体地说,我有一个函数
f num=print((Int.toString num)^“\n”)
。到目前为止,我有:

fun for(from,to,f)=
        if from=to then [f(to)]
        else f(from)::for(from+1,to,f)
这给了我一个返回类型
单元列表
。如何调用函数而不附加到先前的结果

要返回的
()
是上次调用
f
()
——也就是说,来自
然后
分支的调用

一般来说,当您想做两件事,并且只返回第二件事的结果时,您可以使用以下语法:

(thing1;thing2)
例如:

(print "foo\n"; 2 + 3);
将打印出字符串“foo\n”,然后返回
5

现在,让我们看看代码的两个分支

fun for (from,to,f) = if from = to 
                      then ...
                      else ...
then
分支中,我们只需将
上的
f
调用到
f
已返回
()
,因此我们不再对结果执行任何操作:

fun for (from,to,f) = if from = to 
                      then f to
                      else ...
else分支稍微复杂一些。我们想从中调用f,然后进行递归调用。递归调用的返回类型是
unit
,因此我们希望返回:

fun for (from,to,f) = if from = to 
                      then f to 
                      else (f from;for (from+1,to,f));
另一件事:如果你这样做会发生什么

for (4,3,f)

使用聚合器的内部函数?我试过了。您仍然将f应用于每个数字,并且仍然将其附加到前面的结果,从而给出单位列表类型。或者,你的意思是其他的吗?我的意思是:(我不是sml的专业人士,但在所有函数中都是一样的):'fun-forinner(from,to,f,acc)=如果from=那么acc-else-forinner(from+1,to,f,f(from)::acc)'然后你的乐趣会是:'fun-for(from,to,f)=forinner(from,to,f,[])