2011-05-14 2 views
2

먼저 영어가 제 1 언어가 아니기 때문에 제가 실수로 사과드립니다.새로운 소식을 올리십시오 - 목록을 가지고 도전하십시오

그래서 나는 Prolog를 모두 혼자서 배우기로 결심했다.

나는 TV 쇼에 관한이 데이터베이스를 가지고 있습니다. 다음의 술어가 있습니다.

person (Person_id, Name).

show (Show_id, Name).

이 참여합니다 (Person_id, Show_id, 활동).

내가 알아야 할 것은 2 명의 사람들 사이의 관계 ... 나는 다음과 같은 목표를 작성해야합니다. 네트워크 (Person1, Person2), 2 명의 이름 (Person1, Person2)이 주어지면 2 명의 다른 사람들, Person3과 Person4의 이름 - Person1은 어떤 쇼에서 Person3와 함께 작업했으며 Person2는 Person4와 함께 작업했으며 Person3과 Person4는 함께 작업했습니다.

나는 PERSON1가에 근무하고있는 모든 프로그램의 목록을 만든 다음하여 Person2가에서 일했다.

내 문제는 여기에서 계속하는 방법은 모든 프로그램의 목록을 만들었다. 나는 Person1 쇼에서 일했던 모든 사람들의 목록을 만들 생각을했습니다. Person2 쇼에서 일했던 모든 사람들과 함께 한 다른리스트는 모든 사람들 Person1이 참여했는지 알아 내려고 노력했습니다. Person2가 함께 일했던 사람들 목록에있는 누군가와 함께 일한 경험이 있다면, 함께 일 해왔다.

아무도 나에게이 문제를 해결할 수있는 방법을 알려 줄 수 있습니까? 감사!! 프롤로그에서

+0

Person1과 Person2가 실제로 같은 쇼에서 함께 작업했을 때 _network_를 반환해야하는 것은 무엇입니까? –

+0

Person3과 Person4를 반환해야합니다 : - Person3는 어떤 쇼에서든 Person4와 함께 작업했습니다. - Person1은 모든 쇼에서 Person3과 작업했습니다. - Person2는 모든 쇼에서 Person4와 함께 작업했습니다. – Christine

답변

1

따라서, 당신이 실제로

네트워크 (PERSON1,하여 Person2, Person3, Person4) 같은 술어를 작성해야 "값을 반환"과 같은 것은 존재하지 않는다.

첫 번째 단계는 술어 worked_with (PERSON1,하여 Person2)를 쓰고

뭔가 같은 :

worked_with(Person1,Person2):- 
    participates(Person1,X,_), 
    participates(Person2,X,_), 
    Person1 \= Person2. 

네트워크 술어가 될 것입니다 후 무언가 그러나

network(P1,P2,P3,P4):- 
    worked_with(P1,P3), 
    worked_with(P2,P4), 
    worked_with(P3,P4). 

처럼,이 술어는 이름 대신 ID를 입력으로 사용합니다. 디코딩을 수행 할 래퍼를 작성하기 만하면됩니다. 나는 당신이 운동으로 직접 쓰려고 노력할 수 있다고 생각한다 : b

한편으로 프롤로그를 배우기 시작한 사람이라면 그렇게 복잡한 것을 시도 할 이유가 없다고 생각하지는 않는다. 프롤로그의 동작 방식을 더 간단하게 파악하려고 시도하십시오.

+1

"통합되지 않음"이'/ = '대신 표준 Prolog에'\ ='로 쓰여진다는 점을 제외하고는. –

+0

@larsmans 죄송합니다. 예, 맞습니다. 결정된 –

관련 문제