虽然 is/2 和算术运算符让我们能在 Prolog 中处理数字运算,但在某些情况下,我们不想要小数,而是整数,比如:取整除值或求余。

本节将讲解:

  • 整数除法(整除)操作符 //
  • 取余数 的操作符 mod
  • 相关运算符的优先级和组合方式

📐 浮点除法 vs 整数除法

✅ 普通除法 / 会产生 浮点数(小数)

?- X is 7 / 2.
X = 3.5.

✅ 整数除法 // 会向下取整

?- X is 7 // 2.
X = 3.

这很适合在需要整数结果的场景中使用,比如分页逻辑、循环步长等。


🔁 取余(mod)

我们也可以用 mod 来获取 余数

?- X is 7 mod 2.
X = 1.

再看一些例子:

?- 10 mod 3 =:= 1.
true.

?- X is 15 mod 6.
X = 3.

🧠 总结:// 与 mod 配对使用

这些两个操作经常一起使用。

示例:计算整数商和余数

?- N = 17, Q is N // 5, R is N mod 5.
N = 17,
Q = 3,
R = 2.

这就像我们在学校里学的:

17 ÷ 5 = 商 3,余 2

🧮 更多运算符

运算符描述示例
+3 + 4
-5 - 2
*4 * 3
/除(结果为小数)7 / 2 = 3.5
//整数除法(向下取整)7 // 2 = 3
mod求余7 mod 2 = 1
**幂(乘方)2 ** 3 = 8
^位异或(某些系统)5 ^ 3

🔧 运算符优先级与结合性(可选进阶)

有时你会看到像这样没有括号的表达式:

X is 2 + 3 * 4.

它的求值顺序是:3 * 4 = 12,再 2 + 12 = 14

因为乘法 * 优先级高于加法 +,所以 Prolog 按照正常数学规则来。

如果你想改变顺序,显式使用括号即可:

X is (2 + 3) * 4.  % 结果为 20

✏️ 小练习(建议你动手尝试)

  1. 计算 29 除以 5 的整数商和余数。
  2. 判断 12 mod 4 =:= 0 是否成立。
  3. 编写规则 even(Number):判断一个数是否是偶数。even(X) :- X mod 2 =:= 0.

✅ 小结

  • // 执行 整数除法
  • mod 得到 除法的余数
  • 运算符优先级与数学一致;
  • 括号可以控制运算顺序;
  • 这些运算符都可以与 is/2 和比较运算符搭配使用。