f# - 模式匹配多个变量

标签 f# pattern-matching tuples

我是 F# 新手,还没有在任何地方见过如何正确执行以下操作

let fun1 a b =
match a b with
| a + b > 0 -> fun2
| a + b < 0 -> fun3

我必须通过模式匹配来完成此任务(作为家庭作业),但我不知道如何正确执行。我想我可以按如下方式使用元组:

let fun1 (a,b) =
match (a,b) with
| (a,b) when a + b > 0 -> fun2
| (a,b) when a + b < 0 -> fun3

但这也不起作用。我该如何继续?

最佳答案

您的想法是正确的,您只是忘记了缩进在 F# 中很重要。添加空格使您的解决方案有效:

let fun1 (a,b) =  
    match (a,b) with
    | (a,b) when a + b > 0 -> fun2
    | (a,b) when a + b < 0 -> fun3

这实际上模式匹配两次,所以我们可能想重写它:

let fun1 t = function 
    | (a,b) when a + b > 0 -> fun2
    | (a,b) when a + b < 0 -> fun3

编译器/解释器会让这个过程通过,但会发出警告:

warning FS0025: Incomplete pattern matches on this expression.

我会把摆脱它作为练习:-)

PS。你很高兴能坦率地说这是家庭作业。

关于f# - 模式匹配多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22380131/

相关文章:

user-interface - 功能风格的对象模型?

recursion - SML 中的模式匹配 - 将列表表示为 (x::y)

python - 以特定顺序解压列表列表中的元组

python - 如何检查节点列表是否已包含在列表列表中的列表中?

visual-studio-2010 - 为什么我不能在F#项目中添加子文件夹?

dll - F#:Microsoft.FSharp.Data.TypeProviders 是否需要配置文件 47?

bash - 只显示grep的第n个匹配项

python - 根据条件在 Pandas 数据框中创建列

performance - F#:从seq中删除重复项很慢

pattern-matching - `with`语句中Agda不确定是否生成构造函数的情况如何处理?