必须编写一些prolog规则来表示等腰三角形的几何属性。
首先要说的是
angleEqual(angle(A,B,C),angle(A,C,B)):-
triangle(A,B,C),
lineEqual(line(A,B),line(A,C)).
第二条规则说
lineEqual(line(A,B),line(A,C)):-
triangle(A,B,C),
angleEqual(angle(A,B,C),angle(A,C,B)).
但是这两个规则一起会导致相互依赖,如果给出事实,例如
,prolog就会永远循环triangle(a,b,c).
lineEqual(line(a,b),line(a,c)).
并查询
?- angleEqual(A,B).
有什么想法吗?非常感谢。
答案 0 :(得分:0)
我认为您可以删除'命名冗余',因为您有事实来说明实体的几何属性。
angleEqual(angle(A,B,C),angle(A,C,B)):-
triangle(A,B,C),
equal(line(A,B),line(A,C)).
lineEqual(line(A,B),line(A,C)):-
triangle(A,B,C),
equal(angle(A,B,C),angle(A,C,B)).
triangle(a,b,c).
equal(line(a,b),line(a,c)).
您的查询将获得答案
?- angleEqual(A,B).
A = angle(a, b, c),
B = angle(a, c, b).
我必须说我对表示有点怀疑,我会尝试将描述基于 points 和距离度量。一些Prolog(例如,SWI-Prolog)配备了高精度数值评估和合理算术。但肯定描述会比你的描述更难......