gpt4 book ai didi

haskell - case()中下划线的含义

转载 作者:行者123 更新时间:2023-12-04 13:37:22 24 4
gpt4 key购买 nike

所以我已经看到了 for 的语法

case () of _
| someBool ->
| someOtherBool ->

我了解它的作用,例如完全独立于 case 评估的事物来切换 case(这是有道理的,因为在这种情况下,这将是单位,并且它将始终是单位)。

我也明白这可以并且(应该)独立于使用案例检查的东西(例如(1 == 1)(someComplexFunction)),但显然单位是最快的。

我不太明白的是下划线是如何工作的。它清楚地通知案例完全忽略操作数的内容,只检查 bool 值。但是这个操作符是从哪里来的呢?在什么其他情况下我可以使用它?

最佳答案

正如@Rhymoid 在评论中所说,它只是一个模式匹配,没有任何东西被绑定(bind),它可以被一个名称替换(这将被绑定(bind))。像这样写可能更清楚:

case () of
_ | someBool -> ...
| somOtherBool -> ...

这也可以写成(或多或少等效)为
case () of
() | someBool -> ...
| someOtherBool -> ...

这些是 guard 。您还可以在更复杂的 case 中设置守卫匹配:
case m of
Just x
| someBool -> ...
| someOtherBool -> ...
Nothing
| someThirdBool -> ...
| someFourthBool -> ...

在每场比赛中都有尽可能多的后卫。

编写您给出的代码的原因是获得一个简洁的 if-then-else 风格的东西,有多种可能性。使用 MultiWayIf 可以更好地编写原始代码启用扩展:
{-# LANGUAGE MultiWayIf #-}
...
if | someBool -> ...
| someOtherBool -> ...
MultiWayIf也可以与任何数量的 bool “案例”一起使用,就像原始代码一样。

对于以后不需要该值的任何模式,下划线可用于任何模式匹配。例如:
andBool True True = True
andBool _ _ = False

或者
f (Just _) = 'J'
f _ = 'N'

关于haskell - case()中下划线的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38695145/

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