Prolog - 不同与不同


这里我们将定义两个谓词—— differentnot。不同的谓词将检查两个给定的参数是否相同。如果相同则返回 false,否则返回 true。not谓词用于否定某个语句,这意味着,当某个语句为 true 时,not(statement) 将为 false,否则如果该语句为 false,则 not(statement) 将为 true。

因此,“不同”一词可以用三种不同的方式表达,如下所示 -

  • X 和 Y 的字面意思并不相同

  • X 和 Y 不匹配

  • 算术表达式 X 和 Y 的值不相等

因此,在 Prolog 中,我们将尝试将语句表达如下:

  • 如果 X 和 Y 匹配,则 different(X,Y) 失败,

  • 否则 different(X,Y) 成功。

相应的序言语法如下 -

  • 不同(X,X):-!,失败。

  • 不同(X,Y)。

我们还可以使用析取子句来表达它,如下所示 -

  • 不同(X,Y):- X = Y,!,失败;真的。% true 是永远成功的目标

程序

以下示例展示了如何在序言中完成此操作 -

different(X, X) :- !, fail.
different(X, Y).

输出

| ?- [diff_rel].
compiling D:/TP Prolog/Sample_Codes/diff_rel.pl for byte code...
D:/TP Prolog/Sample_Codes/diff_rel.pl:2: warning: singleton variables [X,Y] for different/2
D:/TP Prolog/Sample_Codes/diff_rel.pl compiled, 2 lines read - 327 bytes written, 11 ms

yes
| ?- different(100,200).

yes
| ?- different(100,100).

no
| ?- different(abc,def).

yes
| ?- different(abc,abc).

no
| ?-

让我们看一个使用析取子句的程序 -

程序

different(X, Y) :- X = Y, !, fail ; true.

输出

| ?- [diff_rel].
compiling D:/TP Prolog/Sample_Codes/diff_rel.pl for byte code...
D:/TP Prolog/Sample_Codes/diff_rel.pl compiled, 0 lines read - 556 bytes written, 17 ms

yes
| ?- different(100,200).

yes
| ?- different(100,100).

no
| ?- different(abc,def).

yes
| ?- different(abc,abc).

no
| ?-

Prolog 中的非关系

not关系在不SymPy况下非常有用在我们传统的编程语言中,我们也使用逻辑非运算来否定某些语句。所以这意味着当一个陈述为真时,not(statement)将为假,否则如果陈述为假,则not(statement)将为真。

在序言中,我们可以定义它,如下所示 -

not(P) :- P, !, fail ; true.

所以如果P为真,那么剪切失败,这将返回假,否则为真。现在让我们看一个简单的代码来理解这个概念。

程序

not(P) :- P, !, fail ; true.

输出

| ?- [not_rel].
compiling D:/TP Prolog/Sample_Codes/not_rel.pl for byte code...
D:/TP Prolog/Sample_Codes/not_rel.pl compiled, 0 lines read - 630 bytes written, 17 ms

yes
| ?- not(true).

no
| ?- not(fail).

yes
| ?-