prolog中的操作语义

prolog中的操作语义,prolog,Prolog,我的问题很简单,我明白我必须做什么,但似乎我无法表达我的理解。如何根据与非门规则编写谓词来定义异或或或非门 例如: nand(t,t,f). nand(t,f,t). nand(f,t,t). nand(f,f,t). 上面是nand门的真值表。现在,如果我想在Prolog中使用上述术语定义XOR门,例如,我需要询问Prolog关于XOR(X,Y,Z)的问题,它会给我三个可能的答案,我应该如何构建谓词来定义它 谢谢困难的部分是设计与非门的表达式。假设我们信任:那么解决方案可能是 xor(A,B

我的问题很简单,我明白我必须做什么,但似乎我无法表达我的理解。如何根据与非门规则编写谓词来定义异或或或非门

例如:

nand(t,t,f).
nand(t,f,t).
nand(f,t,t).
nand(f,f,t).
上面是nand门的真值表。现在,如果我想在Prolog中使用上述术语定义XOR门,例如,我需要询问Prolog关于XOR(X,Y,Z)的问题,它会给我三个可能的答案,我应该如何构建谓词来定义它


谢谢

困难的部分是设计与非门的表达式。假设我们信任:那么解决方案可能是

xor(A,B,C) :-
    nand(A,B,O1),
     nand(A,O1,O21),
     nand(B,O1,O22),
      nand(O21,O22,C).
测试:


困难的部分是设计与非门的表达式。假设我们信任:那么解决方案可能是

xor(A,B,C) :-
    nand(A,B,O1),
     nand(A,O1,O21),
     nand(B,O1,O22),
      nand(O21,O22,C).
测试:


看看@capepolic给出的答案。您只需要首先使用布尔逻辑,根据给定的操作写出(或“连接”)所需的操作。他演示了如何从NAND输入获取XOR。如果您想要NOR,您将再次使用布尔逻辑。NAND不是(A和B)。
也不是(A或B)
。使用逻辑规则,如
非(A或B)
相当于
(非A)和(非B)
。如何从NAND获得
而不是
?简单:
非A=NAND(A,A)
。从这里开始做一些工作,找出
或(a,B,C)
。说清楚一点,我在之前的评论中没有写Prolog语句。它们只是逻辑陈述。但是,如果你想一想,这些信息应该足以帮助你解决问题。请参阅@capelical给出的答案。您只需要首先使用布尔逻辑,根据给定的操作写出(或“连接”)所需的操作。他演示了如何从NAND输入获取XOR。如果您想要NOR,您将再次使用布尔逻辑。NAND不是(A和B)
也不是(A或B)
。使用逻辑规则,如
非(A或B)
相当于
(非A)和(非B)
。如何从NAND获得
而不是
?简单:
非A=NAND(A,A)
。从这里开始做一些工作,找出
或(a,B,C)
。说清楚一点,我在之前的评论中没有写Prolog语句。它们只是逻辑陈述。但是,如果你想一想,这些信息应该足以帮助你解决问题。