Learn Prolog Now 翻译 - 第五章 - 数字运算 - 第一节,Prolog中的数字运算

内容提要

Prolog中的数字运算

Porlog运算的本质

Prolog中的数字运算

Prolog语言本身提供了一些基础的运算符号,对整数进行一些操作(即类似...-3, -2, -1, 0, 1, 2, 3等)。多数Prolog的实现同时也提供了一些工具对实数进行操作

(比如浮点数,1.53,6.35,等等)。但是我们不会讨论浮点数,因为浮点数在典型的Prolog应用中很少,所以不是本文的重点。但是另一方面,整数是在Prolog

中有典型应用场景的(比如记录列表的长度),所以掌握起应用是十分重要的。我们从Prolog处理简单的一些操作开始,比如加减乘除。

数学运算      Prolog表达式

6 + 2 = 12      8 is 6 + 2.

6 * 2 = 12      12 is 6 * 2.

6 - 2 = 4         4 is 6 - 2.

6 - 8 = -2        -2 is 6 - 8.

6 ÷ 2 = 3        3 is 6 / 2.

7 ÷ 2 的余数为1    1 is mod(7, 2).

在Prolog中可以进行如下的查询:

?- 8 is 6 + 2.

yes

?- 12 is 6 * 2.

yes

?- -2 is 6 - 8.

yes

?- 3 is 6 / 2.

yes

?- 1 is mod(7,2).

yes

更重要的是,我们可以将运算结果使用变量进行表示,比如:

?- X is 6 + 2.

X = 8

?- X is 6 * 2.

X = 12

?- R is mod(7,2).

R = 1

而且,我们可以使用在谓词定义中使用运算符号。这里有一个简单的例子,定义一个谓词,add_3_and_double/2,其中的参数都是整数类型;这个谓词获取第一个参数,

加上3,在乘以2,并将其计算结果放到第二个参数中。我们定义这个谓词代码如下:

add_3_and_double(X, Y) :- Y is (X + 3) * 2.

使用Prolog查询,得出结果如下:

?- add_3_and_double(1, X).

X = 8

?- add_3_and_double(2, X).

X = 10

另外,Prolog中运算符的优先级和我们平时使用的优先级一致,当我们写:3 + 2 *  4,我们知道的含义是:3 + (2 * 4),并不是:(3 + 2) * 4,Prolog也是遵循这种优先级:

?- X is 3 + 2 * 4.

X = 11

Prolog数字运算的本质

以上内容是Prolog数字运算的基础,现在我们更深入地进行学习。最重要的是首先理解,+, -, *, /, mod,并不能进行任何的运算,事实上,诸如3+2,3*2之类的

表达式知识Prolog中的复杂语句。这些语句的函子是:+, -, *, /, mod,参数是数字(比如3,2)。实际上,Prolog不会对这类复杂语句进行特殊的处理,比如,如果

我们查询:

?- X = 3 + 2.

X = 3 + 2

true

即,Prolog只会简单地将变量X和复杂语句3+2合一,而不会进行运算。它只会执行谓词=/2的常规作用:进行合一。

类似地,如果我们查询:

?- 3 + 2 * 5 = X

X = 3 + 2 * 5

true

同样地,Prolog只是将变量X和复杂语句3+2*5进行绑定,而不会计算出结果:13。促使Prolog真正进行数字运算的,是我们之前使用的:

is

事实上,is会有特殊的作用,它会发送给Prolog一个信号说:“嘿,不要当成普通的复杂语句对待这个表达式,请调用内置的运算方式进行计算!”

时间: 2025-01-18 10:55:49

Learn Prolog Now 翻译 - 第五章 - 数字运算 - 第一节,Prolog中的数字运算的相关文章

Learn Prolog Now 翻译 - 第六章 - 列表补遗 - 第一节,列表合并

内容提要: 列表合并的定义 列表合并的使用 列表合并的定义 我们将会定义一个很重要的谓词:append/3,其中所有的参数都是列表.从声明性角度去看,append(L1, L2, L3)的含义是列表L3是列表L1和列表L2的合并结果(合并意味着连接).比如, 如果我们查询: ?- append([a, b, c], [1, 2, 3], [a, b, c, 1, 2, 3]). 或者查询: ?- append([a, [foo, gibble], c], [1, 2, [[], b]], [a,

Learn Prolog Now 翻译 - 第五章 - 数字运算 - 第三节,整数的比较

内容提要 Prolog中如何进行整数的比较 整数比较的实际应用 Prolog中如何进行整数的比较 一些Prolog的运算谓词可以实际地进行运算(即,不需要通过“is”协助),这些运算谓词都是进行整数比较的操作符. 运算实例 Prolog表达式 x < y   X < Y. x ≤ y  X =< Y. x = y  X =:= Y. x /= y X =\= Y. x ≥ y   X >= Y. x > y X > Y. 这些操作符有明确的含义,可以直接在Prolog中

Learn Prolog Now 翻译 - 第五章 - 数字运算 - 第四节,练习题和答案

练习题5.1  Prolog会如何回答下面的问题? 1. X = 3*4. 2. X is 3*4. 3. 4 is X. 4. X = Y. 5. 3 is 1+2. 6. 3 is +(1,2). 7. 3 is X+2. 8. X is 1+2. 9. 1+2 is 1+2. 10. is(X, +(1,2)). 11. 3+2 = +(3,2). 12. *(7,5) = 7*5. 13. *(7, +(3,2)) = 7*(3+2). 14. *(7, (3+2)) = 7*(3+2)

Learn Prolog Now 翻译 - 第五章 - 数字运算 - 第二节,数字运算与列表

内容提要 列表中的一些数字运算,累加器 尾递归调用 列表中的一些数字运算,累加器 关于数字运算最为重要的应用,可能是获取一些数据结构体的一些有用事实,比如列表.例如,知道列表的长度是很有用的.我们将会给出一些使用列表和数字运算的例子. 一个列表的长度是多少?这里有一个递归定义: 1. 空列表的长度为0. 2. 非空列表的长度为 1 + len(T),其中len(T)是非空列表的尾部. 这个定义在Prolog中很容易实现,以下是实现代码: len([], 0). len([_|T], N) :-

Learn Prolog Now 翻译 - 第四章 - 列表 - 第四节,练习题和答案

练习题4.1 Prolog将会如何回答下面的查询? 1. [a, b, c, d] = [a, [b, c, d]]. 2. [a, b, c, d] = [a | [b, c, d]]. 3. [a, b, c, d] = [a, b, [c, d]]. 4. [a, b, c, d] = [a, b | [c, d]]. 5. [a, b, c, d] = [a, b, c, [d]]. 6. [a, b, c, d] = [a, b, c | [d]]. 7. [a, b, c, d] =

Learn Prolog Now 翻译 - 第三章 - 递归 - 第四节,更多的实践和练习

在学习了前三章内容后,我们应该对Prolog编程有了直观和理性的认识.由于合一.变量初始化.证明搜索和递归都是Prolog的核心概念,所以有如下更多的一些实践和练习. 这里我会先录入题目,后期再给出我自己的程序代码和一些思考. 实践1 试想有如下的描述迷宫的知识库.其中的事实描述了点和点之间的联通关系,即connected/2谓词逻辑给出了这样的事实:迷宫中能从参数1的点,直接到达参数2的点.而且, 联通关系是有方向的.单向不能往返的: connected(1,2). connected(3,4

萌新向Python数据分析及数据挖掘 第一章 Python基础 第一节 python安装以及环境搭建 第二节 变量和简单的数据类型

本文将参考<Python编程 从入门到实践>的讲述顺序和例子,加上自己的理解,让大家快速了解Python的基础用法,并将拓展内容的链接添加在相关内容之后,方便大家阅读. 好了!我们开始第一章的学习. 第一章 Python基础 第一节 Python安装以及环境搭建 Python的安装和环境变量的配置通过百度查询即可解决,这里不作赘述. IDE的选择:因为后期需要用来做数据分析,所以直接安装Anaconda会是一个不错的选择. Anaconda详细安装使用教程 https://blog.csdn.

Learn Prolog Now 翻译 - 第三章 - 递归 - 第一节,递归的定义

在Prolog中,谓词可以递归地定义.简要地讲,一个谓词是递归定义的,如果一个或者多个规则的定义中包含了规则自身. 例子1:消化 考虑如下的知识库: is_digesting(X, Y) :- just_ate(X, Y). is_digesting(X, Y) :- just_ate(X, Z), is_digesting(Z, Y). just_ate(mosquito, blood(john)). just_ate(frog, mosquito). just_ate(stork, frog

Learn Prolog Now 翻译 - 第四章 - 列表 - 第一节,列表定义和使用

内容提要 列表定义: 合一在列表中的使用: 匿名变量: 列表定义 正如名字暗示的,列表就是多个元素组成的集合.更精确地说,是元素的有限序列.在Prolog中的列表,有如下的一些具体例子: [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [ ] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[ ], dead(z), [2, [b, c]], [ ]