2

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

有没有人有办法解决吗?也许我必须降级我的swpl?

谢谢!

4

2 回答 2

2

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

于 2013-03-26T10:53:32.990 回答
1

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

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

[Sterling L.,Shaphiro E.,“序言的艺术”,第 2 版。- 麻省理工学院出版社]

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

于 2013-03-26T11:00:18.770 回答