试图理解 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)
最佳答案
有两种访问元组元素的方法,您的代码似乎混淆了它们。首先,您可以在双元素元组上使用 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
绑定(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 算法