/*
 * ej-01-10.pl
 *
 * Dadas las siguientes definiciones del predicado pegar/3
 * (este es el enunciado original de la guia de practicas)
 */

pegar1( [], L, L ).
pegar1( [X|Y], Z, [X|T] ) :- pegar1(X, Z, T).


pegar2( [X|Y], Z, [X|T] ) :- pegar2(X, Z, T).
pegar2( [], L, L ).


pegar3( [], L, L ) :- !.
pegar3( [X|Y], Z, [X|T] ) :- pegar3(X, Z, T).

/*
 * Indicar la(s) respuesta(s) de cada definicion ante
 * la siguiente consulta:
 *
 *         <- pegar( X, [a,b,c], [e,f,g,a,b,c] ).
 *
 * Justifique su respuesta.
 */

item_a :- pegar1( X, [a,b,c], [e,f,g,a,b,c] ).

/*

| ?- item_a.
      1    1  Call: item_a ?
      2    2  Call: pegar1(_38,[a,b,c],[e,f,g,a,b,c]) ?
      3    3  Call: pegar1(e,[a,b,c],[f,g,a,b,c]) ?
      3    3  Fail: pegar1(e,[a,b,c],[f,g,a,b,c]) ?
      2    2  Fail: pegar1(_38,[a,b,c],[e,f,g,a,b,c]) ?
      1    1  Fail: item_a ?

no

*/

item_b :- pegar2( X, [a,b,c], [e,f,g,a,b,c] ).

/*

| ?- item_b.
      1    1  Call: item_b ?
      2    2  Call: pegar2(_38,[a,b,c],[e,f,g,a,b,c]) ?
      3    3  Call: pegar2(e,[a,b,c],[f,g,a,b,c]) ?
      3    3  Fail: pegar2(e,[a,b,c],[f,g,a,b,c]) ?
      2    2  Fail: pegar2(_38,[a,b,c],[e,f,g,a,b,c]) ?
      1    1  Fail: item_b ?

no

*/

item_c :- pegar3( X, [a,b,c], [e,f,g,a,b,c] ).

/*

| ?- item_c.
      1    1  Call: item_c ?
      2    2  Call: pegar3(_38,[a,b,c],[e,f,g,a,b,c]) ?
      3    3  Call: pegar3(e,[a,b,c],[f,g,a,b,c]) ?
      3    3  Fail: pegar3(e,[a,b,c],[f,g,a,b,c]) ?
      2    2  Fail: pegar3(_38,[a,b,c],[e,f,g,a,b,c]) ?
      1    1  Fail: item_c ?

no

*/
