2011-07-29 72 views
2

我已经定义的类型和功能:递归函数来讨论OCaml中

type element = ... 

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

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

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

我想这肯定是一个递归函数,在这个阶段对我来说有点复杂,任何人都可以帮忙吗?

非常感谢您

+5

您应该为'merge'功能使用内置的''选项'类型。然后返回'None'或'Some element'作为结果。 –

回答

2

好吧,我可以发布一个解决方案,但是这是没有乐趣,也不是你非常有启发:)。相反,让我试着给出一些提示,如果你仍然困惑,我会尽力帮助更多。

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

不要犹豫,让我知道如果你仍然有问题......快乐编码! :)