prolog - 已达到 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 ,但随后我达到了堆栈限制。我猜我需要一个基本案例,但我不确定它会是什么?我的解决方案是否正确?
解决方案
哦,这么近。
您的主要问题是您有具有相同签名的事实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.
推荐阅读
- angular - angular universal not working even on empty project
- tensorflow - 为什么 tf.estimator.TrainSpec 中的 max_steps 会影响训练模型是否在 tensorflow 中完全导出?
- python - 从另一个包 Python 导入类
- c# - 使用绑定时滚动到列表视图中最后添加的项目
- r - 相同点的多边形和线没有正确重叠
- swift - 使用 Swift (Firestore) 访问特定文档字段
- python - 如何在pygame中检查我的类的所有实例之间的冲突?
- android - ListView 的片段 SearchView
- ruby-on-rails - Rails 5:是否可以打印出具有不同语言区域设置的页面?
- arrays - 如何将 json 值推入数组而不被 angular 6 替换?