码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-15 22:31:03      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

内容提要

 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!