未定义的过程s / 1谓词

时间:2013-03-26 10:28:33

标签: prolog

我正在学习初学者课程。我们应该使用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)

有没有人有解决方案?我必须降级我的swipl吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

你的SWI-Prolog没关系,但你误解了这项任务。您必须使用Peano表示而不是通常的数字来编写add / 3的定义,例如,2变为s(s(0))。您可以搜索类似的问题,例如我answered,以帮助您理解在您面临的相同背景下的实际Prolog执行。

答案 1 :(得分:1)

您不必降级解释器版本,因为s/1不是实际谓词(这就是您收到此错误的原因)。 s/1只代表你已经知道的“继承者”,它用于以递归方式表示数字。

  

Prolog中的自然数字是由两个结构构成的   常数符号0和arity的后继函数s。所有   然后以0, s(0), s(s(0)), s(s(s(0))), ...递归地给出自然数。我们采用s n (0)表示的约定   整数 n ,即后继函数的 n 应用程序   0

[Sterling L.,Shaphiro E.,“The Prolog”,第2版。 - 麻省理工学院出版社]

我认为你会发现this related question很有趣。