奇怪的FSharpLint警告

rex*_*ghk 6 f#

我想重新实现这个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的错误吗?

scr*_*wtp 6

显然这是一个错误的规则.看一下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)

foldfoldback此处的情况相同,因此它不遵循两者之间签名的差异.

应翻转初始状态和集合参数的顺序,请参阅定义中使用的"助记符"方法foldback.