我想重新实现这个List.distinct功能:
let inline distinct list =
let folder curr = function
| [] -> [curr]
| l -> if List.contains curr l then l else curr :: l
List.foldBack folder list []
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我有一个皮棉警告说
List.foldBack f x []也许可以被重构成x
然而,这对我来说没有多大意义,因为这导致我返回原始列表而不执行不同的逻辑.
这是FSharpLint的错误吗?
显然这是一个错误的规则.看一下FSharpLint 默认配置的摘录:
List.fold f x [] ===> x
Array.fold f x [||] ===> x
List.foldBack f x [] ===> x
Array.foldBack f x [||] ===> x
Run Code Online (Sandbox Code Playgroud)
它fold和foldback此处的情况相同,因此它不遵循两者之间签名的差异.
应翻转初始状态和集合参数的顺序,请参阅定义中使用的"助记符"方法foldback.