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

时间:2018-11-13 19:04:29

标签: 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 -> 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')))

1 个答案:

答案 0 :(得分:1)

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

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

如果您在测试数据中将;更改为$(document).ready(function() { $(".row_number").bind("click", function(e) { if ($(this).css("background-color") != "rgb(26, 179, 148)") { $(this).css("background-color", "rgb(26, 179, 148)"); $(this).css("color", "white"); } else { $(this).css("background-color", "rgb(255,255,255)"); $(this).css("color", "#676a6c"); } }) }),则应该会看到更接近所需内容的内容。在我的测试中,至少还有一个问题需要解决。