2011-12-18 7 views
2

나는 사실의 데이터베이스를 거치며 각 사실의 숫자를 합하여 목록에 저장하는 규칙을 작성하려고합니다. 구체적으로 말하자면,프롤로그 - 목록에 재귀 적으로 추가하기

두 스테이션간에 이동 소요 시간을 표시하거나 반환하는 Q5에 대한 응답을 기반으로 규칙을 작성하십시오.

답변 질문 5 : 나는 목록을 추가하고 '시간'과를 추가했습니다,하지만 운이있다

time(Station1,Station2) :- overground(Station1,Station2,Time), 
    overground(Station1,_,Time), 
    overground(_,Station1,Time). 
time(Station2,Station1) :- overground(Station2,Station1,Time), 
    overground(Station2,_,Time), 
    overground(_,Station2,Time). 
time(Station1,Station2) :- overground(Station1,Station3,Time), 
    time(Station3,Station2); 
    overground(Station1,Station3,Time), 
    time(Station2,Station3). 
time(Station1,Station2) :- overground(Station1,_,Time), 
    overground(_,Station2,Time). 
time(Station1,Station2) :- overground(Station2,_,Time), 
    overground(_,Station1,Time). 

.

* 예 해당 세미콜론.

"overground (X, Y, Z)"형식의 모든 지하철역과 시간이있는 파일이 있습니다. 즉 오버 그라운드 (kenton, southkenton, 2). station1, station2, 그리고 1에서 2로 갈 때까지 걸리는 시간을 보여줍니다.

전체 데이터베이스를 탐색하여 X와 Y를 찾고 (5 번 질문 함) 모든 Z를 더합니다. 두 방송국 사이에 방송국 명단에 올릴 수 있습니다.

+0

코드를보다 쉽게 ​​읽을 수 있도록 다시 포맷했습니다. 이것이 실제로 법적 Prolog가 아닌 경우 사과드립니다. 그러나 비례 글꼴로 읽기 코드를 견딜 수 없으며 코드 스 니펫에 가로 스크롤 막대가 싫어합니다. 그래서. 중간에있는 ';'가 세미콜론이나 쉼표로 간주되는 코드를 다시 포맷하는 동안? – sarnold

답변

1

글쎄, 솔직히 말해서 당신의 질문은 5 리팩토링이 필요합니다. links ~ questionsthe 같은 subject을 알려 주시면 시작하겠습니다.

이러한 재귀를 처리하는 방법을 알게되면 현재 질문에 대한 대답을 쉽게 할 수 있습니다.

+0

감사합니다. 지금 살펴 보겠습니다. :) – daydream