提示不回来
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 整数!尝试一下!否则搜索 successor-arithmetics.
我尝试做一些练习 - 在 "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 整数!尝试一下!否则搜索 successor-arithmetics.