为什么';groupBy的工作方式和我认为的列表一样?(F#)

为什么';groupBy的工作方式和我认为的列表一样?(F#),f#,F#,下面是一个示例代码: let x = [5, 6, 65, 2, 3]; let p = x.Head; let y = Seq.groupBy (fun xx -> if xx < p then -1 elif xx > p then 1 else 0) x printfn "%A" y 但实际上它输出 seq [(0, seq [(5, 6, 65, 2, 3)])] 我误解了什么?问题是您的列表是一个包含单个元组的列表: let x = [5, 6, 65, 2, 3

下面是一个示例代码:

let x = [5, 6, 65, 2, 3];
let p = x.Head;
let y = Seq.groupBy (fun xx -> if xx < p then -1 elif xx > p then 1 else 0) x
printfn "%A" y
但实际上它输出

seq [(0, seq [(5, 6, 65, 2, 3)])]

我误解了什么?

问题是您的列表是一个包含单个元组的列表:

let x = [5, 6, 65, 2, 3];
这是因为逗号定义了一个元组。这实际上与写作相同:

// Build a tuple
let temp = (5,6,65,2,3)
// Make a list where the single item is the tuple
let x = [temp]
您需要使用分号来定义列表的元素:

let x = [5; 6; 65; 2; 3];
如果进行更改,您将看到:

seq[(0,seq[5]);(1,seq[6;65]);(-1,seq[2;3])]

let x = [5; 6; 65; 2; 3];