2013-04-16 3 views
0

조부모 (X, Y) : - 부모 (X, 어머니 (Y)).Prolog에 조부모님의 정의, 어떤 프롤로그 프로그래머가이 문제를 해결하는데 도움이 될까요?

일반적으로 조부모는 부모 (X, Z), 부모 (Z, Y)로 정의됩니다 ... 그러나 X의 부모 Y의 부모로서 더 자연스럽게 보입니다. t는 저보다 더 잘 설명합니다. 미안합니다.) 제 질문은 : 그 정의가 여전히 유효한 것으로 간주 될 수 있습니까? X는 조부모이지만, Y는 손자, 단지 여자 아이되지 않습니다 :

grandparent(X, Y) :- parent(X, Y), mother(Y). 

이 비록 절반 만 사실이다 :

답변

2

나는 당신의 구문이 잘못 프롤로그에서 의향이 복구 할 수있는 최선이있다 자기 자식과. grandparent(X,Y)이 예상되는 정의를 갖기 위해서는 논리적으로 중간 세대와 어떤 것을 통합해야합니다. 그게 전통적인 개념의 Z입니다. mother/1 대신 mother/2을 정의한 경우 mother(Mother, Child)Child이라는 어머니를 의미하므로 기본적으로 parent/2의 동의어를 갖게되며 솔루션을 생성하는 데 실패한다는 점을 제외하고는 일반적인 정의와 다를 바 없습니다. 아이가 남성 인 솔루션의 절반. 정말로, 그것은 단지 1/4 정확합니다.

Prolog는 다른 프로그래밍 언어의 의미에서 암시 적 반환 값을 가지지 않으므로 parent(X, mother(Y))과 같은 표기법은 거의 의미가 없습니다.

+0

솔직히 말해서 이것은 전체 코드 을 제외하고는 parent (X, father (Y))로 정의되고 parent는 father (X, Y)로 정의되는 paternalgrandparent가됩니다. mother (X, Y) 코드 샘플을 예제로 사용하여 필요하지 않은 코드 행을 읽을 필요가 없습니다. –

+0

그 외에도 Male 및 Female에 대한 정의가 있습니다. 전체 코드를 붙여야한다고 생각하기 시작했습니다. –

+0

최소 작업 예제 (또는 문제가 버그 인 경우 최소한의 작동하지 않는 예제)가 일반적으로 가장 좋은 방법입니다. 그 코드를 제외하고 예제를 실행하는 데 필요한 모든 것을 빼면 좋습니다. –