Prolog - 连词与析取


在本章中,我们将讨论合取和析取性质。这些属性在其他编程语言中使用 AND 和 OR 逻辑。Prolog 在其语法中也使用相同的逻辑。

连词

可以使用逗号 (,) 运算符来实现连接(AND 逻辑)。因此,用逗号分隔的两个谓词用 AND 语句连接起来。假设我们有一个谓词parent(jhon, bob),这意味着“Jhon是Bob的父母”,另一个谓词male(jhon),这意味着“Jhon是男性”。所以我们可以做另一个谓词father(jhon,bob),这意味着“Jhon是Bob的父亲”。当他是父母并且他是男性时,我们可以定义谓词father

析取

析取(OR 逻辑)可以使用分号(;)运算符来实现。因此,用分号分隔的两个谓词用 OR 语句连接起来。假设我们有一个谓词,father(jhon, bob)。这表明“Jhon 是 Bob 的父亲”,另一个谓词mother(lili,bob)表明“lili 是 bob 的母亲”。如果我们创建另一个谓词child() ,则当father(jhon, bob)为真或 mother(lili,bob)为真时,这将为真。

程序

parent(jhon,bob).
parent(lili,bob).

male(jhon).
female(lili).

% Conjunction Logic
father(X,Y) :- parent(X,Y),male(X).
mother(X,Y) :- parent(X,Y),female(X).

% Disjunction Logic
child_of(X,Y) :- father(X,Y);mother(X,Y).

输出

| ?- [conj_disj].
compiling D:/TP Prolog/Sample_Codes/conj_disj.pl for byte code...
D:/TP Prolog/Sample_Codes/conj_disj.pl compiled, 11 lines read - 1513 bytes written, 24 ms

yes
| ?- father(jhon,bob).

yes
| ?- child_of(jhon,bob).

true ?

yes
| ?- child_of(lili,bob).

yes
| ?-