나는 my previous question의 대답과 설명을 읽었으며 주어진 설명을 Bratko (인공 지능을위한 프롤로그 프로그래밍, 130 쪽)에 적용 해 보았습니다.), 나는 그것을 완전히 이해하고 있는지 확신 할 수 없다. 목표 목록에서 커팅으로 프롤로그 목표를 해석하고 효율성을 향상시키는 방법
는C :- P, Q, R, !, S, T, U.
프롤로그 하나 하나의 시도가 결국에 정상으로, 변수를 인스턴스화합니다 다음과 같이 나는 나무와 코드를 읽어
: 예는 설명한다 true.
에 도착하십시오. P
및 Q
에 대한 값이 발견되고 R
에서 첫 번째 시도가 실패한 다음 Prolog가 P
및 Q
이 발견 된 경우를 추적 할 수 있고 가능한 경우 R
에 대해 다른 옵션을 시도해 봅시다. 그러나 R
이 발견되면 (P, Q, R = true.
) !
은 항상 성공하므로 선택 지점을 버리고 그 지점부터 추적 할 내용이 없습니다 (심지어 C :- V.
도 아님). 즉, S
에 대한 결과가 없으면 목표 C :- P, Q, R, !, S, T, U.
이 즉시 실패합니다. 그러나 프롤로그는 B
의 다른 값을 찾으려면 A :- B, C, D.
으로 되돌아 갈 수 있습니다. B
에 대해 다른 일치 항목이 발견되면 C
이 다시 다시 시도됩니다. 등등.
내 해석이 정확하다고 가정하면 B
값에 관계없이 목표 C :- P, Q, R, !, S, T, U.
이 성공하거나 실패하면 효율성을 어떻게 향상시킬 수 있습니까? 내 생각 엔 A :- B, C, D.
을 A :- B, !, C, D
으로 다시 쓰는 것입니다.
제 해석이 맞습니까? C
에 대한 선험적 인 정보가 주어지면 효율성이 어떻게 향상 될까요?
감사합니다. 나는 그것을 지금 이해하게되어 기쁘다. 나무에서 생각할 때와하지 않을 때를 생각하면 더 나은 구별을해야합니다. 나는 내 마음 속에서 허용되지 않는 나무의 순서가 바뀌고 선언적 의미가 바뀔 것이기 때문에 'A : - C, B, D'로 재 순서화하는 것을 생각하지 않았다. 이 경우가 아니며 결국에는 질의의 결과에만 관심이 있으며 질서는 관심이 없습니다.지금까지 나를 안내 해주셔서 다시 한번 감사드립니다! –
도움이되어 기쁩니다. :) –