提示不回来

Prompt does not come back

我尝试做一些练习 - 在 "s representation" 中表示数字,这意味着“0”是零,s(0) 是 1,s(s(0)) 是 2 等等。 我尝试编写用于添加 "s numbers" 的谓词: 谓词 s2int 将 "s number" 转换为 int.

s2int(0, 0).
s2int(s(X), Y) :-
   s2int(X, Y1),
   Y is 1 + Y1.

add(X, Y, Z) :-
   s2int(X, SX),
   s2int(Y, SY),
   s2int(Z, SZ),
   SZ is SX + SY.

当我查询添加时,它会写出正确答案,但提示不会返回。 有什么问题?

您对 add/3 的定义工作正常,并且如果 所有三个 参数都给出,也会终止。如果将其中之一保留为变量,则目标之一 s2int(XYZ, SXYZ) 将有两个未实例化的变量作为参数。因此它描述了一个无限大的集合,其完整枚举需要无限长的时间。

不确定您要做什么,但您可能想为后继算术定义 add/3。您可以做到这一点,而无需求助于 0、1、2 整数!尝试一下!否则搜索 .