2016-09-25 103 views
1

我將如何計算Ocaml中列表中某個特定元素的出現次數?計算列表中元素的出現次數 - OCaml

count 2 [1;2;2;2;2;3;4;5] # should return 4 

我很難弄清楚摺疊是如何工作的以及如何在這裏應用它。我試着做:

count element list = fold (fun f ele head -> if ele = head then 1 else 0) 0 list 

但是,這不斷返回0爲我的測試?

回答

1

您的代碼非常接近。原諒我,但我會認爲你是OCaml的初學者。

在表達式fun f ele head -> ...中,您定義了一個函數,其中有三個參數,分別爲f,elehead。我懷疑你打算將f作爲該函數的名稱。但OCaml中的lambdas(函數表達式)沒有名稱(例如JavaScript)。

OCaml中沒有標準功能fold。假設您正在使用左邊的摺疊,List.fold_left。要摺疊的函數有兩個參數:第一個是先前函數調用的累積結果,第二個是列表中的新元素。

所以,你的內部功能應該看起來更像是這樣的:

fun accum ele -> .... 

摺疊函數返回新積累結果。所以顯然你不想只返回0或1.你想返回新的計數。

我不想多說了,因爲我懷疑這是學校作業的一部分。我希望這有幫助。

(作爲邊評論,這個問題是不是遞歸。遞歸是List.fold_left爲您處理,您只需要填寫的功能和初始值。)