OCaml中列表的长度

时间:2014-01-22 14:33:52

标签: ocaml

如何获取列表中最长子列表的长度?我花了很多时间在这上面,我一点也不知道。

例如:

Function([[1;2];[1;2;3];[]]) 

返回3

3 个答案:

答案 0 :(得分:4)

我对OCaml很生疏,但List.fold_left应该足够了:

List.fold_left (fun a b -> Pervasives.max a (List.length b)) 0 [[1;2];[1;2;3];[]]

我现在无法测试代码,自从我上次使用OCaml(版本3.XX)以来已经很长时间了,所以语法可能有点不同,但这种方法肯定有效:你传递给折叠一个函数将当前最大值和当前子列表作为输入,它返回两者之间的最大值。

答案 1 :(得分:3)

这应该有效

 List.fold_left (fun current_max l -> max current_max (List.length l)) 0 [[1;2]; [1;2;3]; []]

您可以在http://try.ocamlpro.com

上试用

答案 2 :(得分:2)

即使使用fold_left的其他解决方案有效,这里也是一个“手动编码”的解决方案:

let longestsublist l = 
    (let rec aux l current_max = match l with
                                 | [] -> current_max
                                 | x::xs -> aux xs (max (List.length x) current_max)              
     in aux l (-1))