2013-10-25 42 views
0

我真的停留在如何去這個要求我算表內底片的數量,我會提交的分配與:OCaml的算底片

let nneg = [4; 9; -5; 0; -5; 1];; 
    List.filter nneg (fun-> (-)) 
    List.filter nneg (fun x -> x < 0) 

,但它不是一個「INT列表 - >詮釋」,而是一個「INT表」

,所以我開始了這一點,但我無法弄清楚了我的生活如何的模式匹配它:

let rec rev nneg = match nneg with | [] -> 0 | head::tail ->(filter tail<0) head;; 

回答

3

你不不想過濾列表。你想把折成它爲int。該調用也有錯誤的觀點。

# List.filter;; 
- : ('a -> bool) -> 'a list -> 'a list = <fun> 

因此filter是一個函數,它接受一個返回bool和一個列表的函數。過濾器返回過濾列表。過濾器的示例用法:

# List.filter (fun x -> x > 0) [1;2;3;-3];; 
- : int list = [1; 2; 3] 

由於這是一項任務,我會給你一個提示。看看摺疊功能here。顯然,你可以通過過濾所有大於或等於0的元素然後對它們進行計數來解決它,但這需要兩次迭代。