2012-02-19 7 views
1

목록에있는 모든 목록에 목록을 추가하는 방법을 찾으려고합니다. 같은appendAll - 목록 내의 모든 목록에 목록 추가

뭔가 :

appendAll([a,b],[[q,w],[z,x]],X). 
X = [[a,b,q,w],[a,b,z,x]]. 

나는 아직 프롤로그에 새로 온 사람과 중첩 된 목록은 꽤 날을 던지고있다.

내가 지금 몇 시간 째 이렇게보고있어 :

appendAll([], _, []). 
appendAll(_, [], []). 
appendAll([H1|T1], [H2|T2], X) :- 
    append(H1,H2,R), 
    appendAll(T1,[H2|T2],X). 
    % recurse down to [], and append back up 

어떤 도움은 많이 감사합니다 감사합니다!

답변

3

Prolog로 프로그래밍하는 것이 어려운 것은 실제적인 재귀 패턴에 익숙해지고 익숙해지기 위해서입니다. 많은 경우에 직접적으로 재귀를 생각하지 않는 것이 가장 좋지만, 모든 구조에 대해 단순한 것이 여기에서 효과가 있는지 물어보십시오.

이 경우 목록 목록과 다른 목록 목록 간의 관계가 필요합니다. 두 요소는 요소 길이가 같으며 요소가 서로 일치합니다.

appendAll(Prefix, Lists, Prefixedlists) :- 
    maplist(append(Prefix), Lists, Prefixedlists). 

술어 maplist/3 많은 프롤로그 시스템에 정의되어 있습니다. 없는 경우, ISO 부합하는 시스템과 같이 그것을 정의 : 여기

maplist(_Cont_2, [], []). 
maplist(Cont_2, [X|Xs], [Y|Ys]) :- 
    call(Cont_2, X, Y), 
    maplist(Cont_2, Xs, Ys). 

이 동일, 일반 술어 :

maplist_append(Prefix, [], []). 
maplist_append(Prefix, [X|Xs], [Y|Ys]) :- 
    append(Prefix, X, Y), 
    maplist_append(Prefix, Xs, Ys). 
+0

흠 난이 큰 확신하지만 난 전혀 아니에요 그것을 이해하십시오. – ftsk33

+1

좋습니다. 나는 내 실수를 발견했다. 감사! – ftsk33

관련 문제