2016-10-18 114 views
1

似乎很简单,但我对这门语言很陌生,并且遇到了一些麻烦。给定两个列表,编写函数以确定哪个列表“更大”的最佳方法是什么?比较Ocaml中的两个列表

例如:[1:2:3]和[1:3:2]将返回[1:3:2]

这些列表不必是相同长度:[1: 2]和[1:2:3]将返回[1:2:3]

谢谢。

+0

并不多,在如何开始时有点失落。通过这个:http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html –

+1

好吧,然后我会给你一个提示。哪一个应该更大,'[1; 3]',或'[1; 2; 3]'?如果是后者,那么你需要_first_比较列表的_lengths_,_then_元素明智地比较它们。另外:可以从错误的实现开始。事实上,你可以在这里发布,以便人们可以帮助调试它。 – Yawar

+0

好的,另一个提示:在你链接的文档中,有内置函数可以完成上面提到的两个部分。对于第一部分,你可能知道我的意思。对于第二部分,请查看“列表扫描”部分。 – Yawar

回答

3

预定义功能max会为你做到这一点:

# max [1;2;3] [1;3;2];; 
- : int list = [1; 3; 2] 
# max [1;2] [1;2;3];; 
- : int list = [1; 2; 3] 

当然,这取决于你的意思是“大”的东西。 OCaml的内置比较使用lexicographic order。如果您想使用其他顺序,您实际上必须编写自己的函数。

或者您可能想从头开始编写自己的功能,仅供练习使用。在这种情况下,在OCaml中使用列表的一个好方法是使用递归。尝试一些递归模式,并且(如果您仍然需要帮助),请更新您的问题以显示您尝试的内容。