首页 > 解决方案 > 如何让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
;;

但它返回:

标签: functionfunctional-programmingocaml

解决方案


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

;OCaml 中的列表具有由分号 ( )分隔的元素。您的测试数据使用逗号代替 ( ,)。逗号用于元组,这就是您在结果中看到元组的原因。

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


推荐阅读