【问题标题】:How to make tail function return what I need?如何让tail函数返回我需要的东西?
【发布时间】:2019-04-16 16:37:06
【问题描述】:

我需要在 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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2013-01-26
      • 1970-01-01
      • 2016-07-09
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      相关资源
      最近更新 更多