해서 인증, 통일 프로세스의 손에 의해 "할 수
추적 선 표지 종료한다 : (9) 실제로 [C] [X, Y의 '단점 혼성' Z] :
?- concat([a,b,c],[x,y,z],L).
L = [a, b, c, x, y, z] ;
L = [a, b, c, x, y, z] ;
...
이 이 종료되지 않습니다
?- [Head|[]]=[c],List=[x,y,z],[Head|List]=O.
Head = c,
List = [x, y, z],
O = [c, x, y, z].
을하지만, 당신은 그것을 작동 주장 할 수 없습니다이며 이는 분명히 몇 가지 문제점을 나타냅니다. 두 번째 절은 행동과 구문 모두에서 중복됩니다. 그것은 보통 모든 목록에서 암시 현재의 빈 꼬리 목록 이후
concat([Head], List, [Head|List]).
과 같이 기록 될 것입니다 - 꼬리가 명시 적으로 표시되는 경우를 제외하고 :
?- [Head|[]]=[X].
Head = X.
행동에 대해, 당신은에서 볼 수있다 귀하의 흔적은 결코 사용되지 않는 첫 번째 절입니다. 그래서, 그것이 중복 된 첫 번째라고 생각할 수 있습니다 - 어쩌면 당신은 'singleton'리스트가 필요한 세 번째 절의 마지막 호출 때문에 두 번째를 추가했을 것입니다 (나는 ...,concat([Head], C, Concat).
을 의미합니다). 그러나 그러한 전화는 비 종결 문제를 야기하고 있습니다. 두 번째 절을 제거하고 세 번째 절을 단순화하는 전체 프로그램을 단순화하는 것이 더 좋습니다.