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,[])