List 在Ocaml中讨论的递归函数

List 在Ocaml中讨论的递归函数,list,function,recursion,ocaml,List,Function,Recursion,Ocaml,我定义了一个类型和一个函数: type element = ... let merge (x0: element) (x1: element): element * bool = ... merge返回的第二部分表示x0和x1是否可以合并。如果是,返回的第一部分是合并的结果,否则第一部分可以忽略 然后我想实现一个函数重构:元素列表->元素列表,只要列表中的任意两个元素都可以合并(我们用它们合并的结果替换这两个元素),合并的顺序就不重要了 我想这一定是一个递归函数,在这个阶段对我来说有点复杂,

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

type element = ...

let merge (x0: element) (x1: element): element * bool = ...
merge
返回的第二部分表示
x0
x1
是否可以合并。如果是,返回的第一部分是合并的结果,否则第一部分可以忽略

然后我想实现一个函数
重构:元素列表->元素列表
,只要列表中的任意两个元素都可以合并(我们用它们合并的结果替换这两个元素),合并的顺序就不重要了

我想这一定是一个递归函数,在这个阶段对我来说有点复杂,有人能帮我吗


非常感谢

好的,我可以发布一个解决方案,但这对你来说既不有趣,也没有太多的指导意义:)。相反,让我试着给你一些提示,如果你仍然感到口吃,我会尽力帮助你

  • 事实上,正如Nathan所建议的,您的
    merge
    函数应该返回
    option(element)
    ,这是返回函数可选结果的经典方法
  • 要编写
    restructure
    我建议您从函数
    merge\u into(res:element,elts:element list)
    开始,该函数将尝试将
    elts
    合并到
    res
    中。希望这比重组更容易
  • 如何使用
    合并到
    中来实现
    重组

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

您应该为
合并
功能使用内置的
'a选项
类型。然后为结果返回
None
Some元素。