내 의도는 Prolog에서 단순성 (transmitivity)에 대한 간단한 예제를 구현하는 것이 었습니다. Prolog : 간단한 사실에 대한 전 이성 검사
이
내 사실이다 : 나는 확인하려면이 조건을 서면으로 작성했습니다trust_direct(p1, p2).
trust_direct(p1, p3).
trust_direct(p2, p4).
trust_direct(p2, p5).
trust_direct(p5, p6).
trust_direct(p6, p7).
trust_direct(p7, p8).
trust_direct(p100, p200).
여부 A
신탁 사실 C
을 C
및 A
신탁이 B
트러스트하는 B
이있을 때마다 :
trusts(A, B) :-
trust_direct(A, B).
trusts(A, C) :-
trusts(A, B),
trusts(B, C).
을
술어는 trusts(p1, p2)
또는 trusts(p1, p5)
의 경우 true
을 반환하지만, 예를 들어 trusts(p5, p6)
은 이미 ERROR: Out of local stack
을 반환합니다.
Prolog가 스택을 빠르게 플러딩합니까?
내 생각/구현 trusts
나쁜/낭비 시스템 메모리입니까?
니스 설명의 정의를 사용하여 프롤로그 시스템의 테이블 화 기능을 사용! 그러나 우리는 이미'trusts (A, C) : trust_direct (A, B), trusts (B, C)'('trust_direct/2'에 대한 호출)을 가지고 있다면, 우리는 두 번째'트러스트 (A, B) : - trust_direct (A, B)가 필요합니다 .'? – daniel451
그건 좋은 질문이며, 스스로 게시 할 가치가 아주 많습니다! 이에 대한 새로운 질문을 제기하고 계속하십시오. – mat
여기에 : [단순 전이 검사를위한 불필요한 술어 정의?] (https://stackoverflow.com/questions/42496415/unnecessary-predicate-definition-for-simple-transitivity-checkup) – daniel451