2011-10-12 5 views

답변

1

기본 케이스를 추가해야합니다 (N = 0 인 경우). 그리고 당신은 또한 N의 predecesor를 할당하는 새로운 신선한 변수를 인스턴스화 할 필요가, 그리고 마지막으로 당신은 또한 재귀의 결과를 반환해야합니다 (| clasuse의 머리에 [H L]) :

first_three(0,_,[). 
first_three(N,[H|T],[H|L]):- 
    N\=0, 
    N1 is N-1, 
    first_three(N,T,L). 

first_three([One,Two, Three|_], [One,Two, Three]). 

를하고 전화 : 물론

, 당신은 또한 그냥이 같은 것을 쓸 수있는 모든

first_three(Path, Y). 
1

먼저, N is N - 1 가능성이 성공할 수 없다 - N 명령형 프로그래밍 언어에서 변수가 아니기 때문에 값을 저장하지 않고 한 번만 할당 할 수 있으므로 말하자면 새 변수를 도입하고 N1 is N - 1과 같은 식으로 호출하고 나중에 사용할 수 있습니다. first_three에 대한 재귀 호출에서 N1 그런 다음 재귀 호출의 마지막 인수가 아무데도 나오지 않으므로주의해야합니다. 마지막 제안으로 두 절에서 술어를 분할하십시오. N0 인 초등 기본 케이스를 관리하는 첫 번째. 두 번째는 육감적 인 케이스를 관리하고 다른 하나는 위에 구축합니다.

오, 그리고 N이 가변 수량이기 때문에, 나는 당신의 술어에 대해 오도 된 first_three이 아닌 다른 이름을 사용하도록 제안합니다.

관련 문제