2011-03-31 6 views
0

foo/3은 두 개의 목록으로 무엇인가를 수행하고 또 다른 결과를 출력하는 술어입니다.프롤로그의 재귀가 발생하지 않는다고 생각합니다.

foo([], Ys, Zs) :- 
    append(Zs, Ys, Final), 
    write(Final), 
    % ? 

foo([X|Xs], Ys, Zs) :- 
    stuff(X, Ys, NewYs, NewZs), 
    foo(Xs, NewYs, NewZs). 

foo ([1,2,3], [a, b, c], L)와 같은 최상위 레벨 호출에서 Final을 L로 지정하고 싶습니다. 나는 추적을 보았다, 나는 뒤로 뭔가를하고있는 것 같다;

... 
    Exit: (9) write([c]) ? 
    Exit: (8) foo([], [], [c]) ? 
    Exit: (7) foo([c], [], []) ? 
L = []. 
+0

구체적으로 * 수행 할 작업 *에 대해 설명하면이 질문의 대답이 훨씬 쉬울 수 있습니다. –

답변

1

당신은 foo([], Ys, Final)foo([], Ys, Zs)을 변경하여이 문제를 해결할 수 있습니다.

그러나 무엇을하려고합니까? L=[]을 얻는 이유는 Prolog가 기본 목록 (foo([], Ys, Zs))을 빈 목록으로 만족했기 때문입니다.

관련 문제