在 F# 中添加两个元组

huf*_*ola 2 f# tuples

试图理解 F# 中的元组..

目前的思考过程

let add tuples a b = 
let a = (_,_)
let b= (_,_)
(a+b)
Run Code Online (Sandbox Code Playgroud)

由于“_”对这种情况无效,这将不起作用,所以我想尝试

let add tuples a b =
let a = (c,d)
let b = (e,f)
fst a + fst b, snd a + snd b;;
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为 c,d,e,&f 不是已知变量。在 Java 中,我传统上只会初始化该变量,以便可以使用它,但在 F# 中,这似乎有点时髦,let a= int 甚至不确定这是否可行

任何试图解决我的思维过程的帮助将不胜感激。谢谢

编辑:

预期结果

a (1,3) b (2,4) 返回 (3,7)

Tom*_*cek 9

从元组访问元素有两种方法,您的代码似乎混淆了它们。首先,您可以在二元素元组上使用fstsnd。你实际上有这个权利,但你需要删除其他不必要的行 -a并且b是元组,所以你可以只写:

let add a b =
  fst a + fst b, snd a + snd b
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用模式匹配。为此,您需要分配一个元组值,即ab定义新变量的模式,如(c, d). 使用模式匹配执行上述操作如下所示:

let add a b =
  let (a1, a2) = a
  let (b1, b2) = b
  a1 + b1, a2 + b2
Run Code Online (Sandbox Code Playgroud)

模式可以let像上面一样出现在独立绑定中,但您也可以直接在函数的参数中使用它们 - 因此您可以将其缩短为:

let add (a1, a2) (b1, b2) = 
  a1 + b1, a2 + b2
Run Code Online (Sandbox Code Playgroud)