2

我尝试做一些练习 - 以“s 表示”表示数字,这意味着“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.

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

4

1 回答 1

4

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

不确定你在追求什么,但可能你想add/3为后继算术定义。您可以做到这一点,而无需使用 0,1,2 整数!试试看!否则搜索

于 2015-01-07T00:21:17.463 回答