Int列表到单位类型

时间:2013-10-12 19:00:25

标签: recursion sml ml

我正在寻找一个函数for : 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)

这给了我一个unit list的返回类型。如何在不附加早期结果的情况下调用函数?

1 个答案:

答案 0 :(得分:1)

您要返回的()()从上一次调用f开始的then - 即来自(thing1;thing2) 分支的调用。

一般来说,只要你想做两件事,只返回第二件事的结果,你就会使用以下语法:

(print "foo\n"; 2 + 3);

例如:

5

会打印出字符串“foo \ n”,然后返回fun for (from,to,f) = if from = to then ... else ...

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

then

f分支中,我们只需在to上致电f即可。 ()已经返回fun for (from,to,f) = if from = to then f to else ... ,因此我们不会对结果做任何其他事情:

unit

else分支稍微复杂一点。我们想从中调用f,然后进行递归调用。递归调用的返回类型是fun for (from,to,f) = if from = to then f to else (f from;for (from+1,to,f)); ,这就是我们想要返回的内容:

for (4,3,f)

另一件事:如果你这样做会怎么样?

{{1}}