0
Prolog에서 톱니 바퀴 세트를 모델링하려고합니다. 그리고 두 개의 바퀴가 다른 체인으로 연결되어 있는지 확인하기 위해 쿼리합니다. 나는 하드 유선 술어의 관점에 종사을 정의하면Prolog : 계산 된 종료 조건의 재귀 문제
connected(X,Y) :-
engages(X,Y).
connected(X,Y) :-
engages(X,Z),
connected(Z,Y).
:
touches(z1,z2).
touches(z2,z3).
touches(z3,z4).
engages(X,Y) :- touches(X,Y).
및
다음이 작동 나는 간단한 재귀가 있습니다.connected(z1,z4).
의 테스트가 진정한 생산
및
connected(z1,z5).
는 false를 생산하고 있습니다.
그러나 굴림 조건자를 계산으로 바꾼 경우 (두 반지름의 합계는 대략 두 센터 사이의 거리 임),이 검색은 무한 재귀 (스택 오버플로)처럼 보입니다. 대답은 거짓이어야합니다.
"터치"계산 자체가 "연결된"펑터라고하지 않는 이유는 무엇입니까? 그것은 functor가 명시 적 술어보다 더 많은 원자를 일치 시키려고 할 것이기 때문입니까?
이
는 대략 내 계산 된 접촉 (A와 B는 ARAD 브래드가 반경이며, 바퀴이고, D는 거리이고 대강 기능을 "거의 같다"이다.touches(A,B) :-
wheel(A,_,_,ARAD),
wheel(B,_,_,BRAD),
distance(A,B,D),
approx(D,(ARAD+BRAD),2),
A \== B.
확인. 터치가 계산되는 두 번째 경우에만 발생합니다. 접촉이 (A, B)와 터치 (B, A)가 모두 참이기 때문입니다. 그것을 시도해 보도록하겠습니다. – interstar
OK, 좋습니다. 감사. :-) – interstar