2011-05-16 5 views
0

다른 목록에 목록을 삽입하는 프롤로그 프로그램을 작성하고 싶습니다. 예를 들어 :목록에 요소를 반복적으로 삽입하십시오.

insertList([X], [], [[X]]). 
insertList([H|T], [H2|T2], [[H|T], H2|T2]). 

그러나 더 재귀가 없기 때문에이 방법은, 하나 개의 목록 만 추가합니다

% insert [1, 2] to [[1, 3, 4], [2, 5]] 
[[1, 3, 4], [2, 5], [1, 2]] 

나는 다음 썼다. 이 경우 재귀를 어떻게 만들 수 있습니까?

insert(X, [], [X]). 
insert(X, [H|T], [X,H|T]). 

그래서, 내가 어떻게 목록을 삽입에 재귀를 만들 수 있죠 :이 코드 목록에 요소를 삽입하는 동안 저도 같은 문제를 겪고? 삽입은 목록의 시작 부분이나 끝 부분에있을 수 있습니다.

답변

0

아마도 다음을보아야합니다. post 첫 번째 대답에는 프롤로그에서 재귀 설명이 포함 된 사이트에 대한 링크가 포함되어 있습니다. 앞에서 언급 한 문제를 해결하기위한 좋은 출발점입니다.

1

분명히 원하는 것은 목록 끝에 항목을 삽입하는 것입니다. 삽입되는 항목이 목록이라는 사실은 여기서 중요한 차이를 만들지 않습니다.

insertAtEnd(X,[ ],[X]). 
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z). 

처음에 삽입하려는 경우 재귀가 필요하지 않습니다. 실제로 Prolog 용어 인 [X|L]은 목록 L의 시작 부분에 항목 X를 "삽입"하기 때문에 술어가 필요하지 않습니다.

아마도 당신은 더 어려운 문제를 염두에 두었을 것입니다. 정렬 된 순서를 유지하기위한 적절한 방법으로 정렬 된 목록. 그러나 질문이 많아서 이것이 당신의 문제라고 제안 할 필요가 없습니다.

관련 문제