算术

转载自:https://mp.weixin.qq.com/s/WvQcyFSb4qb5SnHr0O3sKg

1  Prolog中的算术

Prolog提供了许多用于处理整数的基本算术工具(即,形式为...- 3,-2,-1、0、1、2、3、4 ...的数字)。大多数Prolog实施还提供了处理诸如1.53或6.35×105之类的实数(或浮点数)的工具,但我们将不讨论这些工具,因为它们对于本书中讨论的符号处理任务不是特别有用。另一方面,整数在符号任务中很有用(例如,我们使用它们来说明表的长度),因此了解如何使用它们很重要。我们将首先了解Prolog如何处理加,乘,减, 和除。

 

算术示例 Prolog表示法

6 + 2 = 8                                                    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 = 3                                                    3 is 7/2.

1 is the remainder when 7 is divided by 2 1 is mod(7,2).

 

请注意,在处理整数时,除法会返回整数答案。因此7÷2给出3作为答案,余数为1。

键入以下查询将产生相应响应:

?- 8 is 6+2.

true

 

?- 12 is 6*2.

true

 

?- -2 is 6-8.

true

 

?- 3 is 6/2.

true

 

?- 1 is mod(7,2).

true

 

更重要的是,我们可以通过使用变量来得出算术问题的答案。例如:

 

?- X is 6+2.

 

X = 8

 

?- X is 6*2.

 

X = 12

 

?- R is mod(7,2).

 

R = 1

 

此外,定义谓词时可以使用算术运算。这是一个简单的示例。让我们定义一个谓词add_3_and_double / 2,其参数均为整数。该谓词采用其第一个参数,向其添加三个,将结果加倍,并返回获得的数字作为第二个参数。我们将该谓词定义如下:

 

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

 

确实,这可行:

 

?- 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

 

2  近距离观察

这是基础知识,但我们需要了解更多。最重要的要领是:+,*,-,÷和mod不执行任何算术运算。实际上,诸如3 + 2、3-2和3 * 2之类的表达式只是简单的项。这些项的函子分别为+,-和*,参数分别为3和2。除了函子介于其自变量之间(而不是在它们前面)以外,它们都是普通的Prolog项,除非我们做一些特别的事情,Prolog实际上不会做任何算术运算。特别是如果我们提出查询

 

?- X = 3+2.

 

我们没有得到答案X = 5。相反,响应我们的是合一项

 

X = 3+2.

 

也就是说,Prolog仅将变量X合一为复合项3+2。它没有执行任何算术运算。它已经简单地完成了使用= / 2时通常的工作:执行合一。

同样,如果我们构成查询

 

?- 3+2*5 = X.

 

响应我们的是合一项

 

X = 3+2*5.

 <

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值