我正处于在 Prolog 中编写代码的初始阶段,并且仍在尝试围绕范式进行思考,所以请原谅这个问题的原始性。
我在维基百科上读过
A rule is of the form
Head :- Body.
and is read as "Head is true if Body is true".
这很简单。所以我正在建立一个模拟 1 位加法器功能的知识库。
为此,我正在尝试为以下内容创建规则:
如果存在一个门 X,并且 X 是一个与门,并且 X 有一个端子从它出来,并且该端子有一个信号并且信号为 0 那么门 X 必须也至少有一个输入端有一个信号0。
作为 Prolog 规则,我写了这个来反映我上面的句子:
gate(X) /\ gate_type(X, and) /\ terminal(T, X, out) /\ signal(T, SIG) /\ (SIG is 0) :- (gate(X) /\ gate_type(X, and) /\ terminal_type(R, X, in) /\ signal(R, 0)).
为了测试我的规则,我有一个终端t7
,它是与门的终端。
terminal_type(t7, a1, in).
gate_type(a1, and).
当我问 Prolog:signal(t7, 1), signal(t8, 1), signal(t9, X).
或类似的问题时,Prolog 先生告诉我
X = 1;
X = 0;
我得到的答案应该只有 X = 1。