nAnd :: Bool -> Bool -> Bool
nAnd x y = not (x && y)
nAnd2 :: Bool -> Bool -> Bool
nAnd2 x y = (not x) || (not y)
*Main> nAnd True True
False
*Main> nAnd True False
True
*Main> nAnd False True
True
*Main> nAnd False False
True
*Main> nAnd2 True True
False
*Main> nAnd2 True False
True
*Main> nAnd2 False True
True
*Main> nAnd2 False False
True
*Main>
次に計算過程を手で書く。実は (||) がどういう実装になっているか次第だが、疑似コードで
x || y = if (x) then {return True} else {return y}
だと仮定すると、遅延評価であることを考えると、
nAnd True True = not (True && True) = not True = False
nAnd True False = not (True && False) = not False = True
nAnd2 True True = (not True) || (not True) = False || (not True) = not True = False
nAnd True False = (not True) || (not False) = False || (not False) = not False = True
となるのではなかろうか。
No comments:
Post a Comment