为什么max(运营商)没有返回最长的列表?

Goo*_*ide 3 f# max

我想找到两个列表中最长的一个.请考虑以下代码示例:

let xs = ['B']
let ys = ['A'; 'B']
let longest = max xs ys
printfn "%A" longest
Run Code Online (Sandbox Code Playgroud)

与我的期望相反,该计划的产出['B']不是['A'; 'B'].

为什么这样List<'T>实现max?这个实现的确切方式/定义在哪里?

我可以看到这max需要comparison,我认为这意味着实施IComparable.List<'T>通过使用StructuralComparison属性自动完成.但是这种自动实现如何?

我可以使用什么最简洁的替代方案来获得两个列表中最长的一个?

Pet*_*etr 6

F#逐个元素地比较列表.正如'B' > 'A'所以认为第一列表>第二(字典顺序)并中断进一步比较.您可以使用.Length列表中的属性来比较长度.像这样的例子;

let longest = if xs.Length > ys.Length then xs else ys
Run Code Online (Sandbox Code Playgroud)

结果:

val longest : char list = ['A'; 'B'] 
Run Code Online (Sandbox Code Playgroud)