我试图使用模式匹配测试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
请注意,我已经发现了解决实际问题的更好方法。我很好奇为什么这种方法不起作用。
答案 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)