You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用==或/=的情况下实现Haskell同或门(IFF)?

重写Haskell同或门(IFF)函数(禁用==//=)

没问题!既然不能用==或/=运算符,我们可以利用Haskell布尔值的原生特性、逻辑运算或者模式匹配来实现同或逻辑——也就是当两个布尔值相同时返回True,不同时返回False。下面给你几种实用的实现方式:

1. 改造你原有的实现(最贴近你的写法)

你原来的代码里用了x == True和x == False,但在Haskell里,布尔值本身就可以直接作为判断条件:x == True等价于x,x == False等价于not x。直接替换后就能去掉所有==:

条件表达式版本

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

甚至可以更简洁(Haskell的if是表达式,else分支可以直接简化):

iffC x y = x && y || not x && not y

守卫版本

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

2. 模式匹配实现(最直观的Haskell风格)

因为Bool类型只有True和False两个值,我们可以直接匹配所有可能的输入组合,逻辑一目了然:

iffPattern True True = True
iffPattern False False = True
iffPattern _ _ = False

这种写法直接列出所有返回True的情况,剩下的所有组合都返回False,可读性拉满。

3. 基于异或的反运算实现

同或逻辑其实是异或(XOR)的取反。我们可以手动实现异或逻辑(不用/=),再取反得到同或:

iffXor x y = not (x && not y || not x && y)

如果想让代码更清晰,还可以把异或逻辑抽出来作为辅助函数:

iffXor x y = not $ xor x y
  where xor a b = a && not b || not a && b

内容的提问来源于stack exchange,提问作者Daniel_H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:26:04