创建Prolog词汇

时间:2014-01-18 21:07:51

标签: prolog circuit

我对prolog很新,我有一些基本的问题......

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

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

我正在使用SWI Prolog。

(尽我所能翻译成英文)多数民众赞成我必须把它放在prolog中:

决定词汇量(谓词,函数,常量):

端口由常量(X1,X2,...) -

表示

门(X1)

类型(X1)= Xor - 类型:AND,OR,XOR或NOT

电路(C1)

终端(x) - 返回x

的输入和输出

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

Out - 返回输出的函数

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

已连接(Out(1,X1),In(1,X2)) - 端口被连接

信号(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 

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

1 个答案:

答案 0 :(得分:2)

你应该阅读this document以获得灵感:)

例如,基本的函数(即门)可以描述为

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