2017-01-07 2 views
1

런던 관용 코드를 작성 중입니다. 나는 방송국 이름을 표시하고 방송국이 어느 라인에 있는지에 대한 사실을 선언했다. 예 :프롤로그에 두 개의 사실을 그룹화하는 규칙은 무엇입니까?

station(aldgate,metropolitan). 
station(brixton,victoria). 
station(baker,metropolitan). 

2 개의 스테이션이 같은 줄에 있는지, 어떤 줄인지 확인하는 규칙을 만들려고합니다. 예를 들어, aldgatebaker은 같은 줄에 있습니다 (metropolitan).

아이디어가 있으십니까?

+3

전혀 시도한 적이 있습니까? 어디에서 시작해야할지 모르시는 경우 Prolog 자습서 (* 예 : *, [Learn Prolog Now] (learnprolognow.org))를 사용해보십시오. – lurker

+0

감사합니다. 사이트를 살펴본 결과 매우 유용했습니다. –

답변

3

2 개의 스테이션이 같은 줄에 있는지, 어떤 줄인지 확인하는 규칙을 만들려고합니다.

예는 다음 규칙가요

sameLine(Stat1, Stat2, Line) :- 
    station(Stat1, Line), 
    station(Stat2, Line), 
    Stat1 \= Stat2. 

을 할 수있다. 그것은 역의 몇 확인할 수 있습니다

,하지만 sameLine(Stat1, Stat2, metropolitan) 반환 사실을 두 번 호출 라인의 스테이션 (의 커플을 찾을 수 있습니다 (참 sameLine(aldgate, baker, Line) 수익을 호출하고 metropolitanLine를 통합, sameLine(aldgate, baker, metropolitan) 반환 진정한 호출) 같은 줄에 Stat1aldgateStat2baker (처음으로)으로, 그 반대로 (두 번째로) 통합하면됩니다.

는 제약

Stat1 \= Stat2. 

그것은 두 개의 스테이션이 다르다는 것을 강요의 사항을 준수하십시오.

sameLine(aldgate, aldgate, Line)Linemetropolitan으로 통합되면 true를 반환하도록하려면 삭제할 수 있습니다.

당신이 그렇지 않으면, 당신은 Stat1는 다른 Stat2 이상을 비는 것을 부과 할 수 (sameLine(Stat1, Stat2, metropolitan)를 호출 예에 의한 aldgate/bakerbaker/aldgate) 이중 결과를 방지 할뿐만 아니라 그 Stat2 "전에"인 경우, 이런 식으로,

Stat1 @< Stat2 

Stat1 \= Stat2 

를 교체, 당신은,632에서 진정한 취득 10이지만, 거짓 (baker이 "전에"aldgate이 아니기 때문에) sameLine(baker, aldgate, Line)에서.