【问题标题】:Operational Semantics in prolog序言中的操作语义
【发布时间】:2017-08-14 01:16:16
【问题描述】:

我的问题很简单,我明白我必须做什么,但似乎我不能代表我的理解。如何编写谓词来根据 NAND 门规则定义 XOR 或 NOR 等门?

例如:

nand(t,t,f).
nand(t,f,t).
nand(f,t,t).
nand(f,f,t).

以上是与非门的真值表。现在如果我想在 Prolog 中使用上述术语定义 XOR 门,例如我需要向 Prolog 询问 XOR(X,Y,Z) ,它会给我三个可能的答案,我应该如何构建一个谓词来定义它?

谢谢

【问题讨论】:

  • 查看@CapelliC 给出的答案。您只需要首先使用布尔逻辑根据给定的操作写出(或“连接”)所需的操作。他展示了如何从 NAND 输入中获得 XOR。如果你想要 NOR,你会再次使用布尔逻辑。 NAND 是NOT(A AND B)。 NOR 是NOT(A OR B)。使用 NOT(A OR B) 等逻辑规则等价于 (NOT A) AND (NOT B)。你如何从 NAND 获得NOT A?简单:NOT A = NAND(A, A)。从那里做一些工作来弄清楚nor(A, B, C)
  • 要清楚,我之前的评论中没有写 Prolog 语句。它们只是逻辑陈述。但是,如果您考虑一下,这些信息应该足以解决您的问题。

标签: prolog


【解决方案1】:

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

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

测试:

?- setof(X/Y/Z,xor(X,Y,Z),L).
L = [f/f/f, f/t/t, t/f/t, t/t/f].

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多