我对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
我不知道如何从这里继续。我尝试实现这些功能的所有方法似乎都是错误的(无法咨询)。
答案 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