【问题标题】:Need code of Half and Full adder using Visual Prolog using basis 2-AND-NOT需要使用基于 2-AND-NOT 的 Visual Prolog 的半加器和全加器代码
【发布时间】:2017-12-10 11:05:42
【问题描述】:

我在 Visual prolog 8 上编写代码, 我必须使用真值表编写加法器和半加器并使用基础 2-AND-NOT 我制定的方案: 半加器

还有一个全加器

您有什么想法吗,如何实现?

【问题讨论】:

  • 与任何编程问题一样,您首先必须定义一些一般性的东西。您想在顶层进行什么样的查询/调用?输入和输出是什么?你怎么能代表你给定的信息?你的画很神秘。我认为这是一个带有触发器和/或门的电路,但它们没有正确标记。你可以用 Prolog 事实来表示这些。你写了很多 Prolog 了吗?如果没有,那么你需要做更多的阅读。您还可以通过谷歌搜索“Prolog 电子电路”或类似术语获得一些想法。
  • 第一张图片是一个半加器 - 它有 2 个输入和 2 个输出 - 回答和溢出。而且,不,我还没有使用 Prolog 的经验。第二张图片是全加器。它有 2 个输入 + 1 个输入 (P) 从半加器溢出。它有(全加器)2 个输出——应答和溢出。这样的代码实现了简单的 AND-NOT 功能,我得到了简单的真值表:
  • 您的全加器没有显示进位,这也是全加器的输出。我假设你有两个谓词。类似half_adder(A, B, S, C) 的东西,其中AB 是输入位,SC 分别是总和和进位。对于全加器,full_adder(A, B, Cin, S, Cout) 具有相似的含义,只是这里有一个进位输入 (Cin) 和一个进位输出 Cout
  • 其余的只是按照逻辑。如果你想在 Prolog 中使用基本的 and/2not/1 事实的 X and not (Y and Z),你可以写成 and(Y, Z, AYZ), not(AYZ, NAYZ), and(X, NAYZ, R). ,其中 R 是结果。这应该足以让你走上我认为的正确道路。我不知道您发布的那张图片是您自己的代码还是什么。如果您需要帮助解决您编写的代码中的特定问题,您需要将代码复制到您的问题中并提出问题。不要只在 cmets 中添加指向图像的链接。

标签: prolog


【解决方案1】:

在 ISO Prolog 中,您可以执行以下操作:

halfadd(X, Y, Z, C) :-
   Z is X xor Y,
   C is X /\ Y.

fulladd(X, Y, C, Z, D) :-
   halfadd(X, Y, H, J),
   halfadd(H, C, Z, K),
   D is J \/ K.

我觉得很合适:

X Y C|Z D
-----+---
0 0 0|0 0
0 0 1|1 0
0 1 0|1 0
0 1 1|0 1
1 0 0|1 0
1 0 1|0 1
1 1 0|0 1
1 1 1|1 1

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多