前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【算法】 Prolog的基本语法

【算法】 Prolog的基本语法

作者头像
人不走空
发布2024-02-21 10:07:02
1990
发布2024-02-21 10:07:02
举报
文章被收录于专栏:学习与分享

二、基本语法

2.1 常量和变量

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

代码语言:javascript
复制
?- write(abc).
abc
true.

?- write(Abc).
_3386
true.

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

2.2 关系和属性

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

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

代码语言:javascript
复制
friend(jack, peter).
friend(peter, jack).

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

2.3 规则

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

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

代码语言:javascript
复制
friend(X, Y) :- friend(Y,X).

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

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

代码语言:javascript
复制
mother(X, Y) :- child(Y,X), female(X).

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

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

代码语言:javascript
复制
onesidelove(X, Y) :- loves(X, Y), \+ loves(Y,X).

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

2.5 查询

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

代码语言:javascript
复制
friend(john, julia).
friend(john, jack).
friend(julia, sam).
friend(julia, molly).

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

代码语言:javascript
复制
?- [hello].
true.

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

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

代码语言:javascript
复制
?- friend(john, jack).
true.

?- friend(john, sam).
false.

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

代码语言:javascript
复制
?- listing(friend).
friend(john, julia).
friend(john, jack).
friend(julia, sam).
friend(julia, molly).

true.

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

代码语言:javascript
复制
?- friend(john, Who).
Who = julia ;
Who = jack.

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、基本语法
    • 2.1 常量和变量
      • 2.2 关系和属性
        • 2.3 规则
          • 2.5 查询
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档