我有這個功能,它有一個列表和checkes的副本,如果發現任何重複它們被添加到一個新的列表如下:重複在一個列表中,以一個新的列表
let foo1 z list = list |> List.filter (fun e -> e <= z)
這給foo1 1 [2; 3; 4; 1; 5; 1; 6; 1] => [1; 1; 1] 問題是,我不想使用f#中的任何內置函數
我有這個功能,它有一個列表和checkes的副本,如果發現任何重複它們被添加到一個新的列表如下:重複在一個列表中,以一個新的列表
let foo1 z list = list |> List.filter (fun e -> e <= z)
這給foo1 1 [2; 3; 4; 1; 5; 1; 6; 1] => [1; 1; 1] 問題是,我不想使用f#中的任何內置函數
在列表處理中已經提出了一些基本的F#問題,所以我建議先閱讀一些介紹並自己嘗試。
使用內置的功能是解決實踐中的問題的正確方法。如果你想學習F#並理解遞歸,那麼請閱讀上面的第一個。然後,你應該能夠寫類似:
let rec duplicates z = function
// If the list is empty, return empty list of duplicates
| [] -> []
// If it starts with 'z' then return one duplicate and recursively process the rest
| x::xs when x = z -> x::(duplicates x xs)
// If it starts with something else, then skip the first element and process the rest
| x::xs -> duplicates z xs
有許多F#的介紹解釋filter
和類似的功能是如何實現的。 F# wikibook covers this topic,您可以在www.tryfsharp.org上的大多數F#書籍(請參閱a list on fsharp.org)和Working lists部分中找到它。
感謝您的閱讀技巧,我明確知道今天下午該做什麼。 – user1838768
這是作業嗎?你試過什麼了? – bytebuster
@bytebuster我做了這個問題的功能,它不是一個家庭作業,我想了解不同的內置函數如何工作,我需要一個很好的例子 – user1838768
你知道整個F#編譯器+庫是開源的,在github上https://github.com/fsharp/fsharp –