F# 在F中添加两个元组#

F# 在F中添加两个元组#,f#,tuples,F#,Tuples,试图理解F#中的元组 当前思维过程 let add tuples a b = let a = (_,_) let b= (_,_) (a+b) 这将不起作用,因为“u”对这个案例无效,所以我想试试 let add tuples a b = let a = (c,d) let b = (e,f) fst a + fst b, snd a + snd b;; 这不起作用,因为c、d、e和f都是未知变量。在java中,我通常只是初始化这个变量,这样就可以使用它了,但在F中,这似乎有点奇怪让a=i

试图理解F#中的元组

当前思维过程

let add tuples a b = 
let a = (_,_)
let b= (_,_)
(a+b)
这将不起作用,因为“u”对这个案例无效,所以我想试试

let add tuples a b =
let a = (c,d)
let b = (e,f)
fst a + fst b, snd a + snd b;;
这不起作用,因为c、d、e和f都是未知变量。在java中,我通常只是初始化这个变量,这样就可以使用它了,但在F中,这似乎有点奇怪
让a=int
甚至不确定这是否会起作用

如果您能帮助我修复我的思维过程,我将不胜感激。谢谢

编辑:

预期结果

a(1,3) b(2,4)
return(3,7)

从元组中访问元素有两种方法,您的代码似乎混淆了它们。首先,可以对两个元素元组使用
fst
snd
。实际上您有这个权利,但是您需要删除其他不必要的行-
a
b
是元组,因此您可以只编写:

let add a b =
  fst a + fst b, snd a + snd b
另一个选项是使用模式匹配。为此,您需要将元组值,即
a
b
分配到定义新变量的模式,如
(c,d)
。使用模式匹配执行上述操作如下所示:

let add a b =
  let (a1, a2) = a
  let (b1, b2) = b
  a1 + b1, a2 + b2
模式可以出现在独立的
let
绑定中,如上文所述,但您也可以在函数的参数中直接使用它们-因此您可以将其简化为:

let add (a1, a2) (b1, b2) = 
  a1 + b1, a2 + b2

非常感谢。我正在从Java迁移到F#,缺少所需的声明令人困惑,但这有助于澄清一些问题。@huffola如果在函数中添加显式类型签名,您可能会发现更容易。ie
let add(a:int)(b:int):int*int=fst a+fst b,snd a+snd b
您可以随时在以后删除它们以获得样式或因为它们限制使用。