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