1
似乎很简单,但我对这门语言很陌生,并且遇到了一些麻烦。给定两个列表,编写函数以确定哪个列表“更大”的最佳方法是什么?比较Ocaml中的两个列表
例如:[1:2:3]和[1:3:2]将返回[1:3:2]
这些列表不必是相同长度:[1: 2]和[1:2:3]将返回[1:2:3]
谢谢。
似乎很简单,但我对这门语言很陌生,并且遇到了一些麻烦。给定两个列表,编写函数以确定哪个列表“更大”的最佳方法是什么?比较Ocaml中的两个列表
例如:[1:2:3]和[1:3:2]将返回[1:3:2]
这些列表不必是相同长度:[1: 2]和[1:2:3]将返回[1:2: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中使用列表的一个好方法是使用递归。尝试一些递归模式,并且(如果您仍然需要帮助),请更新您的问题以显示您尝试的内容。
并不多,在如何开始时有点失落。通过这个:http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html –
好吧,然后我会给你一个提示。哪一个应该更大,'[1; 3]',或'[1; 2; 3]'?如果是后者,那么你需要_first_比较列表的_lengths_,_then_元素明智地比较它们。另外:可以从错误的实现开始。事实上,你可以在这里发布,以便人们可以帮助调试它。 – Yawar
好的,另一个提示:在你链接的文档中,有内置函数可以完成上面提到的两个部分。对于第一部分,你可能知道我的意思。对于第二部分,请查看“列表扫描”部分。 – Yawar