/*
 * ej-01-11.pl
 *
 * Utilizando el predicado elegir/3
 */

elegir( X, [X|Xs], Xs ).

elegir( X, [Y|Ys], [Y|Zs] ) :- elegir( X, Ys, Zs).

/*
 * Construya el arbol de busqueda prolog que le permite hallar todas
 * las soluciones posibles para la siguiente consulta:
 */

item_a :- elegir( T, [a1,a2,a3], P ).

/* e indique cuales son las mismas. */

/*

| ?- item_a.
      1    1  Call: item_a ?
2    2  Call: elegir(_38,[a1,a2,a3],_45) ?
2    2  Exit: elegir(a1,[a1,a2,a3],[a2,a3]) ?
1    1  Exit: item_a ?

true ? ;
1    1  Redo: item_a ?
2    2  Redo: elegir(a1,[a1,a2,a3],[a2,a3]) ?
3    3  Call: elegir(_38,[a2,a3],_72) ?
3    3  Exit: elegir(a2,[a2,a3],[a3]) ?
2    2  Exit: elegir(a2,[a1,a2,a3],[a1,a3]) ?
1    1  Exit: item_a ?

true ? ;
1    1  Redo: item_a ?
2    2  Redo: elegir(a2,[a1,a2,a3],[a1,a3]) ?
3    3  Redo: elegir(a2,[a2,a3],[a3]) ?
4    4  Call: elegir(_38,[a3],_99) ?
4    4  Exit: elegir(a3,[a3],[]) ?
3    3  Exit: elegir(a3,[a2,a3],[a2]) ?
2    2  Exit: elegir(a3,[a1,a2,a3],[a1,a2]) ?
1    1  Exit: item_a ?

true ? ;
      1    1  Redo: item_a ?
      2    2  Redo: elegir(a3,[a1,a2,a3],[a1,a2]) ?
      3    3  Redo: elegir(a3,[a2,a3],[a2]) ?
      4    4  Redo: elegir(a3,[a3],[]) ?
      5    5  Call: elegir(_38,[],_126) ?
      5    5  Fail: elegir(_38,[],_126) ?
      4    4  Fail: elegir(_38,[a3],_99) ?
      3    3  Fail: elegir(_38,[a2,a3],_72) ?
      2    2  Fail: elegir(_38,[a1,a2,a3],_45) ?
      1    1  Fail: item_a ?

no

*/
