2014-03-12 2 views
0

나는 Prolog에 매우 익숙하며 '추가'를 사용하여 실험하고있다. 목록의 첫 번째 항목을 취하고 빈 목록 L에 추가하는 매우 간단한 프로그램을 작성하려고합니다.Prolog에서 추가 사용하기

누군가가 왜 이것이 작동하지 않는지 설명해 주시겠습니까?!

add_first([A|_],L) :- append(A,_,L). 

또 다른 빠른 질문입니다.

왜이 코드가 작동합니까?

add_first([A|B],L) :- append(B,A,L). 

하지만이 코드는 아닙니까?

add_first([A|B],L) :- append(A,B,L). 

고마워요.

+0

추가 예제가 생각대로 작동하더라도 'add_first'에서 제공하는 구두 정의를 반영한 ​​것 같습니다. 'add_first'가 어떻게 성공적으로 작동하기를 원하는지에 대한 실제 예제를 주시겠습니까? 설명은'add_first ([1,2,3], L)'과 같은 것이'L = [1]'을 만들어내는 것을 의미합니다. 그러나 당신의'append' 예제는 모두'[1,2,3]'의 꼬리를 포함하고 있습니다. – lurker

답변

1

음, A은 목록의 머리이고 [A|B]이고 B은 하위 목록입니다.

append([],L,L). 
append([H|T],L2,[H|L3]) :- append(T,L2,L3). 

당신이 목록의 첫 번째 인수 목록입니다 것을 이해합니다 : 당신은 APPEND의 정의를 읽어 그래서 만약 A 한 요소입니다. 그래서 당신은 요소를 줄 수 없습니다.

append(A,B,L)이 잘못되었습니다.