未定义过程s/1谓词



我正在上初级入门课程。我们应该使用swi-prolog,这是我的

% library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 3,856 bytes
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.10.4)

我们被要求开发算术谓词add(X,Y,Z)。使用后继s(X) [= X+1]函子。此谓词在我的机器上失败,并出现以下错误:

ERROR: toplevel: Undefined procedure: s/1 (DWIM could not correct goal)

有人有解决办法吗?也许我必须降低我的档次吗?

谢谢!

你的SWI-Prolog很好,但是你误解了任务。您必须编写add/3的定义,使用Peano表示法而不是通常的数字,例如,2变成s(s(0))。您可以搜索类似的问题,例如我回答的问题,以帮助理解您所面临的相同上下文中实际的Prolog执行。

你不必降级你的解释器版本,因为s/1不是一个实际的谓词(这就是为什么你得到这个错误)。s/1代表"后继",你已经知道了,它用来递归地表示数字。

Prolog中的自然数是由两个结构构建的常数符号0和幂次为1的后继函数s。所有的然后将自然数递归地给出0, s(0), s(s(0)), s(s(s(0))), ...。我们采用sn(0)表示整数n,即n个的后继函数应用到0

[Sterling L., Shaphiro E.,"Prolog的艺术",第二版-麻省理工学院出版社]

我想你会发现这个相关的问题很有趣。

最新更新