繁体   English   中英

运营商&在haskell?

[英]Operator & in haskell?

如何检查haskell中true和false操作之间的第二个参数? 例如, False && True只会检查第一个参数,然后将停止操作。 Haskell 中是否有类似False & True东西来检查这两个参数?

&&在前奏中实现为

(&&) :: Bool -> Bool -> Bool
True  && x =  x
False && _ =  False

这意味着在第一个参数为False的情况下,永远不会评估第二个参数。 你总是可以实现你自己的版本来拥有你想要的行为,例如:

(.&&.) :: Bool -> Bool -> Bool
True  .&&. x =  x
False .&&. False =  False    
False .&&. True = False 

其中第二个第二个参数在任何一种情况下都被评估。

没有充分的理由为什么你想要这个,但如果你坚持......

import Control.Parallel (pseq)

(&&!) :: Bool -> Bool -> Bool
a &&! b = b `pseq` (a&&b)

通常,seq (不需要任何导入)也可以代替pseq ,但只有后者才能真正保证b将被评估。

当然,这个函数的语义将与单独的&&完全相同,只是在某些情况下会更慢。

我被 OP 的主题“Operator & in haskell?”误导了。

对于那些在这里寻找 Haskell (&) 的人

&是 Data.Function 中的反向应用运算符

(&) :: a -> (a -> b) -> b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM