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

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

当前的思考过程

let add tuples a b = 
let a = (_,_)
let b= (_,_)
(a+b)

这行不通,因为“_”在这种情况下无效,所以我想试试

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# 中这似乎有点古怪 let a= int 甚至不确定这是否会起作用/p>

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

编辑:

预期结果

一个(1,3) b (2,4) 返回 (3,7)

最佳答案

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

let add a b =
  fst a + fst b, snd a + snd b

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

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

模式可以像上面那样出现在独立的 let 绑定(bind)中,但您也可以直接在函数的参数中使用它们 - 所以您可以将其简化为:

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

https://stackoverflow.com/questions/63908413/

相关文章:

javascript - 如何在 graphql 查询中使用带有变量的 % 符号

java - Hibernate: OneToOne: 同一类型的两个字段

python - 使用 Pandas 和 R 将序列号连接到组中的每一行

python - 为什么在 Pi 的整数倍处 torch.sin() 和 numpy.sin() 的

R - 如果一个值 = x,则删除 "paired"数据帧中的两行

php - 交响乐 5 : how to check if user is banned or no

python - Python 中的 Marching Square 算法

vector - 如何在 Ada 中添加向量

reactjs - Gatsby Netlify 构建错误 : Can't resolve '../

perl - 可以在 perl 中定义一个变量,其值不能在子例程中更改吗?