2

二等辺三角形に関する幾何学的特性を表すために、いくつかのプロローグルールを作成する必要があります。

最初のルールは言うことです

angleEqual(angle(A,B,C),angle(A,C,B)):- 
    triangle(A,B,C), 
    lineEqual(line(A,B),line(A,C)).

2番目のルールは言う

lineEqual(line(A,B),line(A,C)):- 
    triangle(A,B,C), 
    angleEqual(angle(A,B,C),angle(A,C,B)).

しかし、2つのルールが一緒になると相互依存関係が発生し、次のような事実が与えられた場合、プロローグは永遠にループします

triangle(a,b,c).
lineEqual(line(a,b),line(a,c)).

とクエリ

?- angleEqual(A,B).

何か案が?どうもありがとう。

4

1 に答える 1

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).

私は表現について少し懐疑的だと言わざるを得ません。代わりに、ポイント距離の尺度に基づいて説明をしようと思います。一部の Prolog (たとえば、SWI-Prolog) には、高精度の数値評価と有理演算が装備されています。しかし、確かに説明はあなたよりも難しいでしょう...

于 2013-01-05T07:17:11.687 に答える