xor和or在Haskell中有什么区别

oop*_*sie 3 haskell xor

因此,如果且仅当其操作数之一恰好满足以下条件时,如果xor返回:TrueTrue

xor :: Bool -> Bool -> Bool
xor True True = False
xor True False = True
xor False True = True
xor False False = False
Run Code Online (Sandbox Code Playgroud)

我的问题是:会or类似,但True如果一个或两个操作数为,则返回True

kar*_*kfa 5

你可以xor简单地写成

 xor a b = a /= b
Run Code Online (Sandbox Code Playgroud)

or可以简化

 or True _ = True
 or False b = b
Run Code Online (Sandbox Code Playgroud)

为了娱乐,您可以使用nand定义所有逻辑功能。

 nand :: Bool -> Bool -> Bool
 nand True True = False
 nand _ _ = True
Run Code Online (Sandbox Code Playgroud)

not 简单

 not a = nand a a
Run Code Online (Sandbox Code Playgroud)

and 需要两个门

 and a b = not (nand a b)
Run Code Online (Sandbox Code Playgroud)

or,需要三个

 or a b = nand (not a) (not b)  
Run Code Online (Sandbox Code Playgroud)

并且,xor需要四个

 xor a b = let z = nand a b in nand (nand z a) (nand z b) 
Run Code Online (Sandbox Code Playgroud)

  • 甚至更简单地使用无点样式-xor =(/ =) (2认同)