我正在学习初学者课程。我们应该使用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吗?
谢谢!
答案 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很有趣。