0
我创建了一个函数和帮助器函数,用于查找列表中重复元素的数量以及这些元素的含义。如何使用fold_right创建编码运行长度的函数?
let rec _encode l x =
match l with
| [] -> 0
| head::rest -> (if head = x then 1 else 0) + encode rest x
let encode l x = ((_encode l x), x)
在这种情况下,我必须指定元素是什么它来搜索。
所以这是一个两部分问题。 1)我该怎么做才能返回元组列表,格式为(int * 'a) list
,其中int
是rep的编号,'a
是重复的元素。
2)我将如何使用fold_right实现这个?
我想沿着线的东西:
let encode (l : 'a list) : (int * 'a) list = fold_right (fun (x,hd) lst ->
match x with
| [] -> 0
| hd :: rest -> if hd x then (x+1, hd) else (x, hd)) l []
你能解释一下吗?我没有真正关注,我真的很想知道发生了什么。这可以写成让编码l = fold_right(fun x ----我在这里迷路了,因为我认为fold_right中的函数需要两个参数,一个是hd,另一个是累积列表 – Test
@Test我已经扩展了多回答一点。 – melpomene