Haskell AND门不使用==或/ =

时间:2018-03-19 20:50:12

标签: haskell conditional expression

我不允许使用==或/ =,但我不知道如何在没有它的情况下重写它。

iffC x y = 
if x == True && y == True then True
  else if x == False && y == False then True
    else False

iffG x y
  | y == True && x == True = True
  | y == False && x == False = True
  | otherwise = False

3 个答案:

答案 0 :(得分:1)

可以使用模式

定义任何二进制布尔运算符
op :: Bool -> Bool -> Bool
op x y =
   if x
   then if y then ... else ...
   else if y then ... else ...

其中四个...基本上是op的真值表。

这通常导致反模式,如

if z then True else False

应该改写为

z

if z then False else True

应该改写为

not z

if z then True else True

应该改写为

True

False的类似案例。从本质上讲,这些if总是可以重写为z, not z, True, False之一。

答案 1 :(得分:0)

你可以重写这样的现有解决方案,我认为这是练习的目标。

iffC :: Bool -> Bool -> Bool
iffC x y = if x && y
           then True
           else False

iffG :: Bool -> Bool -> Bool
iffG x y | x && y = True
         | otherwise = False

iffP :: Bool -> Bool -> Bool
iffP True True = True
iffP _ _ = False

我真的不明白这项练习是如何有益的,因为所有这些实现都是一种复杂的说法&&

答案 2 :(得分:0)

模式匹配似乎就像它的魅力一样。

iffC :: Bool -> Bool -> Bool
iffC True True = True
iffC False False = True
iffC _ _ = False

你可以获得让你的真相表可见的免费奖励。