【算法】 Prolog的基本语法

简介: 【算法】 Prolog的基本语法


二、基本语法

2.1 常量和变量

Prolog 的变量和常量规则很简单:小写字母开头的字符串,就是常量;大写字母开头的字符串,就是变量。

 
?- write(abc).
abc
true.
 
?- write(Abc).
_3386
true.


上面代码中,abc是常量,输出就是自身;Abc是变量,输出就是该变量的值。


2.2 关系和属性

两个对象之间的关系,使用括号表示。比如,jack 的朋友是 peter,写成friend(jack, peter).。


注意,jack 的朋友是 peter,不等于 peter 的朋友是 jack。如果两个人都认为对方是朋友,要写成下面这样。

 
friend(jack, peter).
friend(peter, jack).

如果括号里面只有一个参数,就表示对象拥有该属性,比如 jack 是男性,写成male(jack).

2.3 规则

规则是推理方法,即如何从一个论断得到另一个论断。

举例来说,我们定下一条规则:所有朋友关系都是相互的,规则写成下面这样。

 
friend(X, Y) :- friend(Y,X).

上面代码中,X和Y都是大写,表示这是两个变量。符号:-表示推理关系,含义是只要右边的表达式friend(Y, X)为true,那么左边的表达式friend(X, Y)也为true。因此,根据这条规则,friend(jack, peter)就可以推理得到friend(peter, jack)。


如果一条规则取决于多个条件同时为true,则条件之间使用逗号分隔。

 
mother(X, Y) :- child(Y,X), female(X).

上面代码中,XY的母亲(mother(X, Y))取决于两个条件:YX的小孩,X必须是女性。只有这两个条件都为truemother(X, Y)才为true

如果一条规则取决于某个条件为false,则在条件之前加上\+表示否定。

 
onesidelove(X, Y) :- loves(X, Y), \+ loves(Y,X).

上面代码中,X单相思Y,取决于两个条件。第一个条件是X喜欢Y,第二个条件是Y不喜欢X

2.5 查询

Prolog 支持查询已经设定的条件。我们先写一个脚本hello.pl

 
friend(john, julia).
friend(john, jack).
friend(julia, sam).
friend(julia, molly).

然后在 SWI-Prolog 里面加载这个脚本。

 
?- [hello].
true.

上面代码中,true.是返回的结果,表示加载成功。

然后,可以查询两个人是否为朋友。

 
?- friend(john, jack).
true.
 
?- friend(john, sam).
false.

listing()函数可以列出所有的朋友关系。

 
?- listing(friend).
friend(john, julia).
friend(john, jack).
friend(julia, sam).
friend(julia, molly).
 
true.

还可以查询john有多少个朋友。

 
?- friend(john, Who).
Who = julia ;
Who = jack.


上面代码中,Who是变量名。任意的变量名都可以,只要首字母为大写。

相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 算法
神经网络算法以及应用场景和基本语法
神经网络算法以及应用场景和基本语法
41 0
|
6月前
|
存储 算法 Python
【牛客网算法】NP18 生成数字列表(语法)
该文描述了一个编程任务:接收一串由空格分隔的整数,将其存储为整数列表。输入是一行整数,输出是这些数字构成的列表。示例输入"1 2 3 4 5"应输出"[1, 2, 3, 4, 5]"。实现方法包括使用`split()`转字符串为列表,然后通过循环或列表推导式将元素转换为整数。此外,文章还列举了Python中列表的内置函数和方法,如`len()`、`max()`、`append()`、`remove()`等。
83 0
|
6月前
|
算法
【算法】 用Prolog解决谁是凶手问题
【算法】 用Prolog解决谁是凶手问题
94 0
|
6月前
|
算法 定位技术
【算法】 用Prolog解决地图着色问题
【算法】 用Prolog解决地图着色问题
90 0
|
6月前
|
人工智能 算法
【算法】深入理解 Prolog:逻辑编程的奇妙世界
【算法】深入理解 Prolog:逻辑编程的奇妙世界
154 0
|
机器学习/深度学习 人工智能 算法
Acwing 算法基础课 c++模板整理(附python语法基础题)(三)
Acwing 算法基础课 c++模板整理(附python语法基础题)
142 0
Acwing 算法基础课 c++模板整理(附python语法基础题)(三)
|
机器学习/深度学习 人工智能 算法
Acwing 算法基础课 c++模板整理(附python语法基础题)(二)
Acwing 算法基础课 c++模板整理(附python语法基础题)
208 0
Acwing 算法基础课 c++模板整理(附python语法基础题)(二)
|
算法 C++ 容器
【C++常用算法】STL基础语法学习 | 拷贝算法&替换算法
将容器内指定范围的元素拷贝到另一容器中
130 0
【C++常用算法】STL基础语法学习 | 拷贝算法&替换算法
|
存储 算法 搜索推荐