因此,如果且仅当其操作数之一恰好满足以下条件时,如果xor
返回:True
True
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
?
你可以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)