haskell 中的运算符 &?
Operator & in haskell?
如何在haskell中检查真假操作之间的第二个参数?例如,False && True
将只检查第一个参数,然后停止操作。 Haskell 中是否有类似 False & True
的东西来检查两个参数?
您没有充分的理由想要这个,但如果您坚持...
import Control.Parallel (pseq)
(&&!) :: Bool -> Bool -> Bool
a &&! b = b `pseq` (a&&b)
通常,seq
(which doesn't require any imports) will also suffice instead of pseq
,但只有后者才能真正保证 b
将被评估。
当然,这个函数的语义将与单独的&&
完全相同,只是在某些情况下会更慢。
prelude中的&&
实现为
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
这意味着在第一个参数是 False
第二个参数的情况下
一个从未被评估过。您始终可以实现自己的版本以获得您想要的行为,例如:
(.&&.) :: Bool -> Bool -> Bool
True .&&. x = x
False .&&. False = False
False .&&. True = False
其中第二个第二个参数在任何一种情况下都被评估。
我被 OP 的主题误导了 "Operator & in haskell?"
对于那些在Haskell
中寻找 (&) 的人
&是Data.Function
中的反向应用运算符
(&) :: a -> (a -> b) -> b
如何在haskell中检查真假操作之间的第二个参数?例如,False && True
将只检查第一个参数,然后停止操作。 Haskell 中是否有类似 False & True
的东西来检查两个参数?
您没有充分的理由想要这个,但如果您坚持...
import Control.Parallel (pseq)
(&&!) :: Bool -> Bool -> Bool
a &&! b = b `pseq` (a&&b)
通常,seq
(which doesn't require any imports) will also suffice instead of pseq
,但只有后者才能真正保证 b
将被评估。
当然,这个函数的语义将与单独的&&
完全相同,只是在某些情况下会更慢。
&&
实现为
(&&) :: Bool -> Bool -> Bool
True && x = x
False && _ = False
这意味着在第一个参数是 False
第二个参数的情况下
一个从未被评估过。您始终可以实现自己的版本以获得您想要的行为,例如:
(.&&.) :: Bool -> Bool -> Bool
True .&&. x = x
False .&&. False = False
False .&&. True = False
其中第二个第二个参数在任何一种情况下都被评估。
我被 OP 的主题误导了 "Operator & in haskell?"
对于那些在Haskell
中寻找 (&) 的人&是Data.Function
中的反向应用运算符(&) :: a -> (a -> b) -> b