我正在尝试重新实现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 []
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我得到了一个lint警告说
List.foldBack f x []
可能会被重构为x
然而,这对我来说没有多大意义,因为这导致我返回原始列表而不执行不同的逻辑。
这是FSharpLint的错误吗?
答案 0 :(得分:6)
显然这是一个错误的规则。看一下FSharpLint default configuration的摘录:
List.fold f x [] ===> x
Array.fold f x [||] ===> x
List.foldBack f x [] ===> x
Array.foldBack f x [||] ===> x
此处fold
和foldback
的内容相同,因此它并不遵循两者之间签名的差异。
应翻转初始状态和集合参数的顺序,请参阅foldback
定义中使用的"mnemonic" approach。