我有这个函数,它需要一个列表并检查重复项,如果发现任何重复项,它们将被添加到一个新列表中,如下所示:
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 涵盖了这个主题,您会在大多数 F# 书籍中找到它(请参阅fsharp.org 上的列表) ,www.tryfsharp.org 上的工作列表部分也涵盖了这个主题。