F# 从判别并集访问元组项

F# 从判别并集访问元组项,f#,F#,我有一种称为x型的类型,它以歧视联盟的形式有以下成员 type Info= Empty | Value of int | Pair of (int * int) 我有一个函数,它接受两个参数,并根据n所做的比较过滤列表。我想不出最后一部分。如何将配对的每个值与该函数中的n值进行比较 let filterInfo (n:int) (xs:Info list) = xs |> List.filter (fun (x) -> x <> Empty && x

我有一种称为x型的类型,它以歧视联盟的形式有以下成员

type Info= Empty | Value of int | Pair of (int * int)
我有一个函数,它接受两个参数,并根据n所做的比较过滤列表。我想不出最后一部分。如何将配对的每个值与该函数中的n值进行比较

let filterInfo (n:int) (xs:Info list) = xs |>  List.filter (fun (x) -> x <> Empty && x > Value n && // ) 
let filterInfo(n:int)(xs:Info list)=xs |>list.filter(fun(x)->x Empty&&x>值n&&//)

您可以创建一个函数,通过使用模式匹配来比较单个
Info
对象。这样的东西应该足够了:

let compareInfo (n:int) (info:Info) =
        match info with
        | Empty -> false
        | Value x -> n > x
        | Pair (a, b) -> ...
您可以通过在筛选器调用中使用curring
n
来调用它:

let filterInfo (n:int) (xs:Info list) = xs |>  List.filter (compareInfo n) 

是否可以不创建任何其他函数就执行此操作?您需要创建一个名为或匿名的函数。如果您想要匿名函数,请尝试:
fun->function Empty->false | Value x->n>x | Pair(a,b)->……
我是否应该尝试类似于上一部分中的Pair(a,b)->n>a&&n>b?我真的很困惑模式匹配“打开”每个匹配包含的值,允许您比较它们。因此,如果
n>a&&n>b
适合您的业务需要,那么这可能是正确的做法。