나는 다음과 같이 시도했습니다 : : 경로 = [[1,2], [2,3], [3,4], [5,6] ]프롤로그 목록의 처음 세 요소를 다른 목록에 저장하는 방법
first_three(N,[H|T],[H|_]):- not(N=0),N is N-1, first_three(N,T,L).
나는 first_three (3, path, Y)를 호출하지만 no를 반환합니다.
나는 다음과 같이 시도했습니다 : : 경로 = [[1,2], [2,3], [3,4], [5,6] ]프롤로그 목록의 처음 세 요소를 다른 목록에 저장하는 방법
first_three(N,[H|T],[H|_]):- not(N=0),N is N-1, first_three(N,T,L).
나는 first_three (3, path, Y)를 호출하지만 no를 반환합니다.
기본 케이스를 추가해야합니다 (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).
먼저, N is N - 1
가능성이 성공할 수 없다 - N
명령형 프로그래밍 언어에서 변수가 아니기 때문에 값을 저장하지 않고 한 번만 할당 할 수 있으므로 말하자면 새 변수를 도입하고 N1 is N - 1
과 같은 식으로 호출하고 나중에 사용할 수 있습니다. first_three
에 대한 재귀 호출에서 N1
그런 다음 재귀 호출의 마지막 인수가 아무데도 나오지 않으므로주의해야합니다. 마지막 제안으로 두 절에서 술어를 분할하십시오. N
이 0
인 초등 기본 케이스를 관리하는 첫 번째. 두 번째는 육감적 인 케이스를 관리하고 다른 하나는 위에 구축합니다.
오, 그리고 N
이 가변 수량이기 때문에, 나는 당신의 술어에 대해 오도 된 first_three
이 아닌 다른 이름을 사용하도록 제안합니다.