- 序言教程
- 序言 - 主页
- Prolog - 简介
- Prolog - 环境设置
- Prolog - 你好世界
- Prolog - 基础知识
- Prolog - 关系
- Prolog - 数据对象
- Prolog - 运算符
- 循环与决策
- 连接词和析取词
- Prolog - 列表
- 递归和结构
- Prolog - 回溯
- Prolog - 不同与不同
- Prolog - 输入和输出
- Prolog - 内置谓词
- 树数据结构(案例研究)
- Prolog - 示例
- Prolog - 基本程序
- Prolog - 剪切示例
- 河内塔问题
- Prolog - 链接列表
- 猴子和香蕉问题
- Prolog 有用资源
- Prolog - 快速指南
- Prolog - 有用的资源
- Prolog - 讨论
Prolog - 不同与不同
这里我们将定义两个谓词—— different和not。不同的谓词将检查两个给定的参数是否相同。如果相同则返回 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 | ?-