F# 从判别并集访问元组项
我有一种称为x型的类型,它以歧视联盟的形式有以下成员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
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) -> ...
您可以通过在筛选器调用中使用curringn
来调用它:
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
适合您的业务需要,那么这可能是正确的做法。