F#Pattern元组中的匹配元素

时间:2015-08-24 01:17:19

标签: f#

我试图使用模式匹配测试char类型元组中元素的相等性,如下所示:

let swap (x,y) =
match fst(x,y) with
| snd(x,y) -> (x,y)
| _ -> (y,x);;

并收到以下错误:stdin(11,8): error FS0039: The pattern discriminator 'snd' is not defined

请注意,我已经发现了解决实际问题的更好方法。我很好奇为什么这种方法不起作用。

2 个答案:

答案 0 :(得分:5)

它不起作用,因为snd(x,y)不是受支持的模式。您可以在此处查看整个表格:Pattern Matching (F#)

您可以使用变量模式并在when之后检查相等性:

match x, y with
| x, y when x = y -> (x,y)
| _ -> (y,x);;

但在这种情况下,最好使用if .. then .. else

if x = y then (x,y) else (y,x)

答案 1 :(得分:1)

它不起作用,因为你不能在匹配模式中使用一个函数。你可以使用这样的模式匹配:

let swap (x, y) =
    match x = y with
    | true -> (x, y)
    | _ -> (y, x)

或只使用简单的if表达式:

let swap (x, y) = if x = y then (x, y) else (y, x)