首页 > 解决方案 > 已达到 Prolog 递归练习堆栈限制

问题描述

我正在尝试解决:

鉴于诸如

编写一个递归程序,确定 Bob 的身高大于 George 的身高。

到目前为止,我的解决方案是:

taller_than(bob, mike).
taller_than(mike, jim).
taller_than(jim, george).

taller_than(X,Y):-
    taller_than(X, Z),
    taller_than(Z, Y).

它按预期返回 True ,但随后我达到了堆栈限制。我猜我需要一个基本案例,但我不确定它会是什么?我的解决方案是否正确?

标签: prolog

解决方案


哦,这么近。

您的主要问题是您有具有相同签名的事实taller_than/2和谓词。taller_than/2当我对其进行初始测试时,这甚至让我措手不及。您需要更改事实或谓词的名称。为此,谓词的名称被更改。

正如您所指出的,您需要一个基本案例并且如果您完成了名称更改,我想您也会知道这一点。

taller_than_rule(X,Y) :-
    taller_than(X,Y).
taller_than_rule(X,Y) :-
    taller_than(X, Z),
    taller_than_rule(Z, Y).

示例运行:

?- taller_than_rule(bob,Who).
Who = mike ;
Who = jim ;
Who = george ;
false.

推荐阅读