2

我对prolog很陌生,我有一些基本问题......

我不知道“词汇”是否是正确的英语世界,但我需要创建一个来描述电子电路。

我的问题是,我如何创建这些函数以及如何使用“=”语句,因为 prolog 似乎不接受它?

我正在使用 SWI Prolog。

这就是我必须放入序言的内容:

确定词汇表(谓词、函数、常量):

端口由常量(X1,X2,...)表示——</p>

闸门(X1)

Type(X1) = Xor – 类型:AND、OR、XOR 或 NOT

电路(C1)

Terminals(x) – 返回 x 的输入和输出

In(1, X1) – 返回 X1 的第一个输入的函数

Out – 返回输出的函数

Arity(c, i, j) – 函数,电路 c 有 i 个输入和 j 个输出

Connected(Out(1, X1), In(1, X2)) - 连接了哪些端口

Signal(t) – 终端 t 的信号值。

这就是我到目前为止所尝试的。我不认为我对“=”的方法是正确的......

gate(x1).
gate(x2).
gate(a1).
gate(a2).
gate(o1).
type(x1, xor).
type(x2, xor).
type(a1, and).
type(a2, and).
type(o1, or).
circuit(c1).

我应该使用名为 Equal(X, Y) 的谓词吗?例如“equal (type(x1), xor).

我应该如何实施这些?

Gate(X1) , Type(X1) = XOR
Gate(X2) , Type(X2) = XOR
Gate(A1) , Type(A1) = AND
Gate(A2) , Type(A2) = AND
Gate(O1) , Type(O1) = OR 

我不知道如何从这里继续。我试图实现这些功能的所有方法似乎都是错误的(无法咨询)。

4

1 回答 1

2

您应该阅读本文档以获得一些灵感 :)

例如,基本功能(即门)可以描述为

and(0, 0, 0).
and(0, 1, 0).
and(1, 0, 0).
and(1, 1, 1).

xor(0, 0, 0).
...

然后组合得到更复杂的构建块

fulladder(A, B, Carryin, Sum, Carryout):-
 xor(A, B, X),
 and(A, B, Y),
 and(X, Carryin, Z),
 xor(Carryin, X, Sum),
 or(Y, Z, Carryout).

计算逻辑函数

?- fulladder(X, Y, Z, 0, 1).
X = 0, Y = 1, Z = 1 ? ;
X = 1, Y = 0, Z = 1 ? ;
X = 1, Y = 1, Z = 0 ? ;
no
于 2014-01-18T21:43:03.027 回答