【发布时间】:2012-04-25 02:23:21
【问题描述】:
有人可以向我解释一下为什么这个 prolog 查询会这样工作吗?定义是:
add(0,Y,Y).
add(succ(X),Y,succ(Z)):- add(X,Y,Z).
鉴于此:
?- add(succ(succ(succ(0))), succ(succ(0)), R).
这是查询的痕迹:
Call: (6) add(succ(succ(succ(0))), succ(succ(0)), R)
Call: (7) add(succ(succ(0)), succ(succ(0)), _G648)
Call: (8) add(succ(0), succ(succ(0)), _G650)
Call: (9) add(0, succ(succ(0)), _G652)
Exit: (9) add(0, succ(succ(0)), succ(succ(0)))
Exit: (8) add(succ(0), succ(succ(0)), succ(succ(succ(0))))
Exit: (7) add(succ(succ(0)), succ(succ(0)),
succ(succ(succ(succ(0)))))
Exit: (6) add(succ(succ(succ(0))), succ(succ(0)),
succ(succ(succ(succ(succ(0))))))
那个教程最让我困惑的部分是,在第一个参数中,成功被剥离,并且它递归。虽然在递归时,R 获得了成功......如何?!另外,第一个出口 (9) 处的零是从哪里来的?我是序言的新手,我正在努力理解家庭作业的语言。非常感谢任何帮助。
注意:任何有兴趣的人,本教程的链接是http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse9
【问题讨论】:
-
通常,
succ/1写作s/1。请查看标有successor-arithmetics 的答案。
标签: prolog successor-arithmetics