在Ocaml中讨论的递归函数

时间:2011-07-29 18:26:14

标签: list function recursion ocaml

我已经定义了一个类型和一个函数:

type element = ...

let merge (x0: element) (x1: element): element * bool = ...

merge返回的第二部分表示x0x1是否可合并。如果是这样,返回的第一部分是合并的结果,否则第一部分可以被忽略。

然后我想实现一个函数restructure: element list -> element list,只要列表的任何2个元素是可合并的(我们用它们合并的结果替换2个元素),它就会保持合并的顺序合并并不重要。

我想它必须是一个递归函数,在这个阶段对我来说有点复杂,有人可以帮忙吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

好的,我可以发布一个解决方案,但这对你来说既不好玩也不擅长:)。相反,让我尝试给出一些提示,如果你仍然被卡住,我会尝试提供更多帮助。

  • 事实上,正如内森所说,听起来你的merge函数应该返回option(element),这是返回函数可选结果的经典方法。
  • 要写restructure,我建议您从函数merge_into(res : element, elts : element list)开始,该函数会尝试将elts合并到res。希望这比restructure更容易。
  • 如何使用restructure实现merge_into

如果您还有问题,请随时告诉我......编码快乐! :)