我需要在 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
;;
但它返回:
顶部显示的测试数据格式不正确。
OCaml 中的列表具有用分号分隔的元素 (
;
)。您的测试数据使用逗号代替(,
)。逗号用于元组,这就是您在结果中看到元组的原因。
如果您在测试数据中将
,
更改为 ;
,您应该会看到更接近您正在寻找的内容。至少还有一个问题需要解决(在我的测试中)。