2016-12-06 3 views
1

나는 my previous question의 대답과 설명을 읽었으며 주어진 설명을 Bratko (인공 지능을위한 프롤로그 프로그래밍, 130 쪽)에 적용 해 보았습니다.), 나는 그것을 완전히 이해하고 있는지 확신 할 수 없다. 목표 목록에서 커팅으로 프롤로그 목표를 해석하고 효율성을 향상시키는 방법

C :- P, Q, R, !, S, T, U. 프롤로그 하나 하나의 시도가 결국에 정상으로, 변수를 인스턴스화합니다 다음과 같이 나는 나무와 코드를 읽어

Bratko p. 130

: 예는 설명한다 true.에 도착하십시오. PQ에 대한 값이 발견되고 R에서 첫 번째 시도가 실패한 다음 Prolog가 PQ이 발견 된 경우를 추적 할 수 있고 가능한 경우 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에 대한 선험적 인 정보가 주어지면 효율성이 어떻게 향상 될까요?

답변

1

예, 이해가 정확합니다. 그것은 더 나은 확인하려면, 우리는 this answer (에서,

a = (b & c & d) 
c = (p & q & r) ~~>! (s & t & u) ; v 
&&:에 대한 &

및 연산자의 다른 부분과 술어를 다시 쓸 수 있습니다하거나 명확하지 않은 경우, ~~>!과 더불어, 의사로 이것을 참조 하나 이상의 해결책을 통과시키지 않아야 함). 절단에 도달하면 c이 커밋되지만 a은 여전히 ​​되돌릴 수 있습니다. A :- B, C, D.에서 C이 성공하거나에 관계없이 B의 가치에 실패 할 경우

은 또한, 그것은 단지 B 한 번 성공할 수 있습니다, A :- B, !, C, D.의 컷은 빨간색

A :- C, B, D. 

과 목표 순서를 변경할 수 있습니다 하지만 두 번째 결과에 관심이 있다면 어떨까요? 적색 상처는 술어의 의미를 변경합니다.

+0

감사합니다. 나는 그것을 지금 이해하게되어 기쁘다. 나무에서 생각할 때와하지 않을 때를 생각하면 더 나은 구별을해야합니다. 나는 내 마음 속에서 허용되지 않는 나무의 순서가 바뀌고 선언적 의미가 바뀔 것이기 때문에 'A : - C, B, D'로 재 순서화하는 것을 생각하지 않았다. 이 경우가 아니며 결국에는 질의의 결과에만 관심이 있으며 질서는 관심이 없습니다.지금까지 나를 안내 해주셔서 다시 한번 감사드립니다! –

+0

도움이되어 기쁩니다. :) –