标签:
内容提要
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一个信号说:“嘿,不要当成普通的复杂语句对待这个表达式,请调用内置的运算方式进行计算!”
Learn Prolog Now 翻译 - 第五章 - 数字运算 - 第一节,Prolog中的数字运算
标签:
原文地址:http://www.cnblogs.com/seaman-h-zhang/p/4649546.html