以下是 《Learn Prolog Now!》第五章 第一节 “Prolog 中的数字运算” 的中文翻译与讲解:
📘 第五章 第一节:Prolog 中的数字运算(Arithmetic in Prolog)
✨ 引子
Prolog 并不是为数值计算设计的语言,但它确实提供了进行算术计算的能力。
在这一节中,我们将学习:
- 如何编写可以执行基本数学运算的规则;
- 如何在 Prolog 中表示数字;
is/2
的工作方式;- 为什么
=
与is
的含义不同; - 比较运算符的使用方式。
🔢 数字和 is
操作符
在 Prolog 中,要执行算术运算,我们不能使用 =
,而要用 is
。
❌ 错误示例:
X = 3 + 4.
这不会让 X
变成 7
,而是:
X = 3 + 4.
即:Prolog 会把 3 + 4
看作一个结构体(compound term),而不是去计算它。
✅ 正确做法:
X is 3 + 4.
这时 X
将被赋值为 7
。
注意:
is
的右边必须是一个可以求值的算术表达式;- 所有参与运算的变量必须已经有了数值,否则会出错。
示例代码:
?- X is 2 + 3.
X = 5.
?- X is (7 * 3) + (4 * 2).
X = 29.
?- Y = 5, X is Y * 2.
X = 10,
Y = 5.
⚠️ 等号 =
与 is
的区别
?- X = 3 + 4.
X = 3+4. % 结构,不做计算
?- X is 3 + 4.
X = 7. % 执行加法
再来看一个例子:
?- A = 6, B = 2, A is B + 4.
A = 6,
B = 2.
而如果你反过来写:
?- A is B + 4, B = 2.
ERROR: Arguments are not sufficiently instantiated
这说明:is
要求其右侧的变量必须已被绑定。
📊 Prolog 中的算术运算符
运算 | 表达式 | 说明 |
---|---|---|
加法 | X is A + B | 加 |
减法 | X is A - B | 减 |
乘法 | X is A * B | 乘 |
除法(浮点) | X is A / B | 得到小数 |
整除 | X is A // B | 向下取整 |
取余 | X is A mod B | 求余数 |
幂运算 | X is A ** B | 幂(A 的 B 次方) |
🧮 比较运算符
Prolog 还提供了数值比较操作:
比较 | 含义 |
---|---|
=:= | 数值相等 |
=\= | 数值不等 |
< | 小于 |
=< | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
示例:
?- 3 + 4 =:= 7.
true.
?- X is 3 + 4, X > 5.
X = 7.
注意:这些比较操作符只能比较数值,不能比较结构。结构比较要用 @<
, @>
, ==
等。
🧠 总结
- 使用
is
来进行数学运算; - 不要混淆
is
和=
; - 比较运算符只能用于数值;
is
要求右边的表达式必须完全可计算(所有变量必须已赋值)。
发表回复