2012-12-13 3 views
2

이것은 Prolog에서의 통합에 대한 과거의 시험에서 얻은 질문입니다. 우리는 그들이 통일되고 그 다음에 실체화가되는지 말하기로되어있었습니다. 프롤로그에서의 통합

f(a,g(b,a)) and f(X,g(Y,X)) 

꽤 =의 X, g (B, A) = g (Y, X)를 통합하고 (아주 정직
f(g(Y),h(c,d)) and f(X,h(W,d)) 

내가이 일 때문에 g의 통합 같아요 Y입니다) =/X, h (c, d)는 h (W, d)와 통합된다. 대문자 X는 솔루션을 찾을 때까지 보이기 때문에 X = g (Y) 일 수 있습니까?

답변

4

그렇습니다. g(Y)은 평가할 용어이고 a - 첫 번째 예에서 가리키고 있기 때문에 통합됩니다.

당신은 프롤로그 인터프리터 평가를 확인할 수 있습니다

?- f(g(Y),h(c,d)) = f(X,h(W,d)). 
X = g(Y), 
W = c. 

통일 과정은 깊이 우선 방식으로 작동, 통합 회원들과 더 이상의 조합이 가능하지 않을 때까지 가능한 대답을 각각 반환.

이 가능한 matchings을 찾아 그의 통일 방법f(g(Y),h(c,d)) = f(X,h(W,d))에 대해 호출됩니다 의미 g(Y) = X, h(c, d) = h(W, d).

그런 다음 통일은 g(Y) = X에서 수행됩니다. 더 이상 가능한 축소가 없으므로 X = g(Y)을 반환합니다.

그런 다음 h(c, d) = h(W, d)과 일치하는 메서드가 호출됩니다.이 메서드는 c = W이되며 다른 일치도가 없으므로 W = c이됩니다.

통합 후 답변이 반환되며 일치/추가 일치가 불가능할 때 답변은 보통 false으로 표시됩니다.

CapelliC에서 지적한대로 Y 변수는 통합 프로세스 후에도 언 바인드입니다. 통일은 의미 언 바운드 변수에 따라 수행됩니다

  • h(c, d) = h(W, d) 반환 h(_) = h(_)의 통일, 그리고이, 통일 계속 할 수 h이 용어, 그리고 언 바운드 VAR 때문에;

  • d = d의 통일은 용어의 일치이며 속성 또는 바인딩을 형성하지 않습니다. 이 결합 전에 없었기 때문에

  • c = W 형태 저작자, 변수 W 통일이 용어 c에 바인딩 - 비교 달리 수행 될 것이다; g(Y)에 사용 가능한 통일이 없기 때문에

  • X = g(Y)의 통일은 단순히 용어 g(Y)에 언 바운드 변수 X을 결합하고, g(Y)은 언 바운드 변수 용어입니다.

감사합니다!

+0

은 '... g (Y)는 용어입니다 ...'라고 대답해야합니다. – CapelliC

+0

감사합니다. – Rubens

+0

통일 후'Y'가 여전히 언 바운드인데 ... – CapelliC