【发布时间】:2013-03-11 19:17:24
【问题描述】:
我正处于在 Prolog 中编写代码的初始阶段,并且仍在尝试围绕范式进行思考,所以请原谅这个问题的原始性。
我在维基百科上阅读
A rule is of the form
Head :- Body.
and is read as "Head is true if Body is true".
这很简单。所以我正在建立一个模拟 1 位加法器功能的知识库。
这样做,我正在尝试为以下内容创建规则:
如果存在门 X,并且 X 是 AND 门,并且 X 有一个终端从它出来,那个终端有一个信号,并且 信号为 0 THEN gate 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。
【问题讨论】:
-
我认为您可能需要将规则重写为 Horn 子句:en.wikipedia.org/wiki/Horn_clause