我正在寻找一个函数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
的返回类型。如何在不附加早期结果的情况下调用函数?
答案 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}}