나는 예를 들어 .. 재귀의 프롤로그 목록의 처음 두 요소를 작성하려고 :쓰기 목록의 첫 번째 요소는
내가 만약 내가 입력
List:[a,b,c,d,e,f]
first_two(F,S,List).
It returns
F:a, S:b ;
F:b, S:c ;
F:c, S:d ;
F:d, S:e ;
F:e, S:f .
다음과 같이 시도합니다.
가 대단히 감사합니다하지만 실패 .. ..
나는 예를 들어 .. 재귀의 프롤로그 목록의 처음 두 요소를 작성하려고 :쓰기 목록의 첫 번째 요소는
내가 만약 내가 입력
List:[a,b,c,d,e,f]
first_two(F,S,List).
It returns
F:a, S:b ;
F:b, S:c ;
F:c, S:d ;
F:d, S:e ;
F:e, S:f .
다음과 같이 시도합니다.
가 대단히 감사합니다하지만 실패 .. ..
first_two(F, S, [F|[S|_]]).
당신은, 재귀의 기본 케이스를 잊어 종료 조건, 즉 : 나는 단순화도했습니다
first_two(F, S, [F, S|_Tail]).
first_two(F, S, [_|Tail]) :-
first_two(F, S, Tail).
을 친숙한 구문과 띄어쓰기를 사용하여 규칙을 위반했습니다.
나는 더 간단한 코드를 선호합니다. 그렇지 않습니까?
그건 내가 뭘 찾고 .. 감사합니다. looooottt :) – Palindrom
한가지 질문 : 나는이 종료를 얻지 못했을 것이라고 생각합니다.이 코드로 무엇을하고 있습니까? 언제 끝내나요? 당신은 설명 할 수 있습니까? 그것은 모든 재귀에 필요합니까? – Palindrom
당신은 재귀 부분을 썼지 만 스콧 헌터 (Scott Hunter)가 제안한 정지 조건을 놓쳤지 만, 잘못된 방법으로 (IMHO)를 빠뜨렸다. '사실'이 없으면 Prolog는 재귀를 실행하지만 최종 목록에 도달하면 적용 대상을 알지 못합니다. – CapelliC
first_two (F, S, [F | [S | 꼬리]]) : - first_two (F, S, 꼬리). – Palindrom
사실 나는 재귀를 시도했지만 어쩌면 그것은 내가 찾을 수없는 다른 방법으로 수행 할 수있다. – Palindrom