gpt4 book ai didi

haskell - 模式匹配相同的值

转载 作者:行者123 更新时间:2023-12-03 11:33:23 26 4
gpt4 key购买 nike

我只是想知道是否可以使用函数式编程语言(Haskell/F#/Caml)的模式匹配工具多次匹配相同的值。

想想下面的例子:

plus a a = 2 * a
plus a b = a + b

当使用两个相似的值(将存储在 a 中)调用函数时,将调用第一个变体。

这是一个更有用的应用程序(简化 AST)。
simplify (Add a a) = Mult 2 a

但是 Haskell 拒绝这些代码并警告我 a 的定义存在冲突。 - 我必须做明确的 case/if-checks 来确定函数是否有相同的值。有什么技巧可以表明我要匹配的变量会出现多次吗?

最佳答案

这称为非线性模式。不久前,haskell-cafe 邮件列表上有几个关于此的主题。这里有两个:

http://www.mail-archive.com/haskell-cafe@haskell.org/msg59617.html

http://www.mail-archive.com/haskell-cafe@haskell.org/msg62491.html

底线:这不是不可能实现的,但为了简单起见,决定不这样做。

顺便说一句,你不需要ifcase解决这个问题; (稍微)干净的方法是使用 guard :

a `plus` b
| a == b = 2*a
| otherwise = a+b

关于haskell - 模式匹配相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179008/

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