%asignacion de valor-literal de la fruta(la pera es 0,el limon es 1,...)
fruta(0,pera).
fruta(1,limon).
fruta(2,kiwi).
fruta(3,lima).
fruta(4,coco).
fruta(5,fresa).
fruta(6,melon).
:-
%inicializacion de los booleanos para saber si una fruta se ha usado ya o no
retractall(usado(_,_)),
assert(usado(0,0)),
assert(usado(1,0)),
assert(usado(2,0)),
assert(usado(3,0)),
assert(usado(4,0)),
assert(usado(5,0)),
assert(usado(6,0)),
%inicializacion de las "casillas"(numero(_,_,_))
retractall(numero(_,_,_)),
assert(numero(0,0,nada)),
assert(numero(0,1,nada)),
assert(numero(0,2,nada)),
assert(numero(0,3,nada)),
assert(numero(1,0,nada)),
assert(numero(1,1,nada)),
assert(numero(1,2,nada)),
assert(numero(1,3,nada)),
assert(numero(2,0,nada)),
assert(numero(2,1,nada)),
assert(numero(2,2,nada)),
assert(numero(2,3,nada)),
assert(numero(3,0,nada)),
assert(numero(3,1,nada)),
assert(numero(3,2,nada)),
assert(numero(3,3,nada)).
%deberia asignar las 7 frutas que existen en 7 "casillas" al azar.
genera(A) :- A > 0,
random(0,3,X),
random(0,3,Y),
numero(X,Y,nada),
dame_fruta(J),
retract(numero(X,Y,nada)),
fruta(J,D),
assert(numero(X,Y,D)),
B is A-1,
genera(B).
%devuelve aleatoriamente una fruta no usada hasta el momento
dame_fruta(J) :- aleatorio_fruta(J),
retract(usado(J,0)),
assert(usado(J,1)).
%devuelve una fruta no usada
aleatorio_fruta(J) :- alea(J),no_usado(J).
%genera al azar un valor entre 0 y 6(posibles valores de las frutas)
alea(J) :- random(0,6,J).
%indica si un elemento de "usado" es 0(no usado)
no_usado(J) :- usado(J,0).
%mostrar por pantalla aquellas posiciones que contienen frutas
muestra(A,B,J) :- fruta(_,J),
numero(A,B,J).
%la ejecución por consola deberia ser:
%?- [ej].
%?- genera(7).
%?- muestra(A,B,J).
%Tras lo cual se deberian suceder 7 posiciones de "casillas"(numero(_,_,_))
%con un valor de fruta distinto cada una de ellas.