Function 如何使tail函数返回我需要的?

Function 如何使tail函数返回我需要的?,function,functional-programming,ocaml,Function,Functional Programming,Ocaml,我需要用OCaml对列表进行编码。命令:编码['a'、'a'、'b'、'b'、'b'、'c'];;必须返回[(2,'a');(3,'b');(1,'c')] 现在我有了这个功能: let encode list = let rec encodeHelper list acc = match list with | [] -> [] | head :: [] -> (1, head) :: [] | head :: headNext :: tail ->

我需要用OCaml对列表进行编码。命令:编码['a'、'a'、'b'、'b'、'b'、'c'];;必须返回[(2,'a');(3,'b');(1,'c')]

现在我有了这个功能:

let encode list =
let rec encodeHelper list acc = match list with
    | [] -> []
    | head :: [] -> (1, head) :: []
    | head :: headNext :: tail -> if (head = headNext) then encodeHelper (headNext :: tail) (acc + 1)
                                    else (acc, head) :: encodeHelper (headNext :: tail) acc
in encodeHelper list 1
;;
但它的回报是:

  • :(int*(char*char*char*char*char*char*char))列表= [(1,('a','a','b','b','b','c'))]

顶部显示的测试数据格式不正确

OCaml中的列表包含以分号分隔的元素(
)。您的测试数据使用逗号(
)。逗号用于元组,这就是在结果中看到元组的原因

如果将
更改为
在您的测试数据中,您应该看到更接近您所寻找的内容。至少还有一个问题需要解决(在我的测试中)