如何让tail函数返回我需要的内容?

问题描述 投票:0回答:1

我需要在 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)) 列表 = [(1,('a','a','b','b','b','c'))]
function functional-programming ocaml run-length-encoding
1个回答
1
投票

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

OCaml 中的列表具有用分号分隔的元素 (

;
)。您的测试数据使用逗号代替(
,
)。逗号用于元组,这就是您在结果中看到元组的原因。

如果您在测试数据中将

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.