recursion - 如何在sml中递归地重复调用另一个函数?

标签 recursion sml smlnj

I have a function called mergeP:

fun mergeP(nil) = nil
| mergeP(x::[]) = x::[]
| mergeP(x::y::zs) = (x @ y)::mergeP(zs);

If mergeP is called like: mergeP([[1],[2],[3],[4]]) it will return [[1,2],[3,4]]. I want to create a function called mergeS that is recursive that repeatedly calls mergeP till the sublist equals just one list. So if mergeS were called like: mergeS([[1],[2],[3],[4]]) it would repeatedly call mergeP till it equals: [1,2,3,4]. Here is my try:

- fun mergeS(nil) = nil
= |mergeS(xs) = mergeS(mergeP(xs));

But this gives me the error:

stdIn:6.1-6.26 Warning: type vars not generalized because of
   value restriction are instantiated to dummy types (X1,X2,...)
val it = [] : ?.X1 list

最佳答案

I believe I got it to work:

fun mergeS(nil) = nil
| mergeS([xs]) = xs
| mergeS(xs) = mergeS(mergeP(xs));

关于recursion - 如何在sml中递归地重复调用另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42912779/

相关文章:

sml - 在 sml 中创建堆栈

python - 为什么这种递归回溯函数比非递归函数慢,用于计算 python 中找零硬币的最小数量?

recursion - Django CMS 多级下拉菜单

sml - 以 SML 打印到标准输出

functional-programming - 如何在标准 ML 中打印多态值?

list - 如何在SML中找到列表中最大的数字

java - 这个设计有什么问题导致无限循环?

bash - bash 中的递归函数

sml - 数据类型的未绑定(bind)类型构造函数

functional-programming - SML:读取一行整数时出现异常