Haskell 建立一个电路,测试两个输入是否相等

Haskell 建立一个电路,测试两个输入是否相等,haskell,circuit,Haskell,Circuit,所以我在做一个问题,内容如下 使用Prop的抽象语法构建一个电路,以测试两个输入是否相等。证明你的电路是正确的 这是有问题的道具 data Prop = FALSE | TRUE | IN String | NOT Prop | OR Prop Prop | AND Prop Prop 本能地,我想写和(在“A”)(在“B”),并给出一个真值表来证明这一点,但这似乎很简单。我错过什么了吗 编辑:我的错,我最终制作了一个XNOR门,解决了这个问题。我误解了XNOR,这是造成混乱的根本原因。答案

所以我在做一个问题,内容如下

使用Prop的抽象语法构建一个电路,以测试两个输入是否相等。证明你的电路是正确的

这是有问题的
道具

 data Prop = FALSE | TRUE | IN String | NOT Prop | OR Prop Prop | AND Prop Prop
本能地,我想写
和(在“A”)(在“B”)
,并给出一个真值表来证明这一点,但这似乎很简单。我错过什么了吗


编辑:我的错,我最终制作了一个XNOR门,解决了这个问题。我误解了XNOR,这是造成混乱的根本原因。答案字段中的解决方案比我的更优雅,因此请参考该解决方案。

两种输入在两种情况下是相等的:要么都是真的,要么都是假的。似乎给定的语言允许这样编码:您可以通过引用输入来检查输入是否为真,即“A”中的
,您可以通过否定输入来检查输入是否为假,即
否(在“A”)
。然后将这些检查与
s以及
结合起来,就完成了:

OR 
   (AND           -- Both "A" and "B" are true
       (IN "A")       -- "A" is true
       (IN "B")       -- "B" is true
   )
   (AND                -- Both "A" and "B" are false
       (NOT (IN "A"))      -- "A" is false  
       (NOT (IN "B"))      -- "B" is false
   ) 


因此,如果“a”为零,“b”为零,那么电路输出不应该为真,因为它们相等吗?IN
中的
如何确定真实性?IN只是将变量替换为它所持有的文字值。例如,如果两者都为FALSE,那么在“A”->FALSE和“B”->FALSE中,所有的操作都是用它们在程序中保存的值替换字符串常量。因此,A被定义为“真”或“假”,并将其更改为该值,而不是“A”或“B”。很抱歉,这是一个全新的概念。如果0和0是真的,那么为什么它被称为AND?如果我两个都没去,我就不能诚实地说“我去商店买了一些牛奶”,除非我两个都去了。同样的道理也适用于数理逻辑。
--------------------------------------------------------------------------
|  A    |  B    | NOT A | NOT B | AND A B | AND (NOT A) (NOT B) | Result |
--------------------------------------------------------------------------
| false | false | true  | true  | false   | true                | true   |
| false | true  | true  | false | false   | false               | false  |
| true  | false | false | true  | false   | false               | false  |
| true  | true  | false | false | true    | false               | true   |
--------------------------------------------------------------------------