gpt4 book ai didi

functional-programming - "square"元组的 Ocaml 模式匹配?

转载 作者:行者123 更新时间:2023-12-04 17:30:48 25 4
gpt4 key购买 nike

在尝试学习 Ocaml 和一般函数式语言时,我一直在研究模式匹配。我在看 this documentation ,并决定为自己尝试以下练习:

制作一个计算结果为 true 的表达式当输入一个整数 4-tuple 使得 4-tuple 中的每个元素都相等时。

(4, 4, 4, 4) -> true
(4, 2, 4, 4) -> false
我发现对元素值的特殊性进行模式匹配并不明显。这是我写的代码。

let sqr x = match x with 
(a, a, a, a) -> true
| (_, _, _, _) -> false ;;

当然,这段代码会抛出以下错误:
Error: Variable a is bound several times in this matching
我还能如何不仅强制 x 是 4 元组,而且强制相等的严格整数?

(此外,当然,“正方形”元组不应该允许非正整数,但我现在更关心上述问题)。
`

最佳答案

正如您所发现的,与其他一些语言的模式匹配系统不同,您无法在 OCaml 中执行此操作。您可以做的是分别匹配元组的每个元素,同时使用守卫只有在某些属性(如等价性)跨它们时才成功:

let sqr x =
match x with
| (a, b, c, d) when a = b && b = c && c = d -> `Equal
| (a, b, c, d) when (a < b && b < c && c < d)
|| (a > b && b > c && c > d) -> `Ordered
| _ -> `Boring

关于functional-programming - "square"元组的 Ocaml 模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47957443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com