gpt4 book ai didi

haskell - 使用案例与函数进行模式匹配

转载 作者:行者123 更新时间:2023-12-02 06:45:05 24 4
gpt4 key购买 nike

假设我想定义一个函数

applyTwice :: (Int -> Int) -> Int -> Int
applyTwice f x = case f x of
0 -> 0
y -> f y

我也可以定义相同的函数

applyTwice f x = g (f x)
where g 0 = 0
g y = f y

它们都会做同样的事情,有时也许其中一个更具可读性,但是两者之间有什么真正的区别吗?一个只是另一个的语法糖吗?是否存在一种奇怪的情况,其中一个工作而另一个不工作?

我能想到的唯一潜在差异是,在第二个函数中,如果我愿意,我可以给 g 一个类型签名,并且如果我想模式匹配多个变量,使用辅助函数可能会将我从嵌套的 case 语句中拯救出来.

最佳答案

当你编写像这样的函数时

g 0 = 0
g y = f y

编译器将其翻译为

g x = case x of
0 -> 0
y -> f y

您可以通过使用 ghc -ddump-simpl my_file.hs 进行编译来检查这一点,然后挖掘生成的核心。所以实际上,模式匹配只是 case 语句的语法糖。使用您认为最可读的那个,两者都是相当标准的。

关于haskell - 使用案例与函数进行模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25458434/

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