/*
  veces(X,L,N)

  Predicado que comprueba si el elemento X aparece N veces en la lista simple L

  Argumentos:
  + X: 
	- Significado: elemento
	- Tipo: entrada y salida
  + L: 
	- Significado: lista de elementos
	- Tipo: entrada y salida
  + N: 
	- Significado: número natural
	- Tipo: entrada y salida

 Variables locales
  + Cola: 
	- Significado: lista de elementos
  + N1: 
	- Significado: número natural

  + Y: 
	- Significado: elemento
*/

veces(_,[],0).

veces(X,[X|Cola],N):-
			veces(X,Cola,N1),
			N is N1 + 1.
				
veces(X,[Y|Cola],N):-
 			not(X = Y),
			veces(X,Cola,N).
 
/*
  veces_bis(X,L,N)

  Predicado que comprueba si el elemento X aparece N veces en la lista simple L

  Nota: se usa el corte "!" en vez de la negación con not

  Argumentos:
  + X: 
	- Significado: elemento
	- Tipo: entrada y salida
  + L: 
	- Significado: lista de elementos
	- Tipo: entrada y salida
  + N: 
	- Significado: número natural
	- Tipo: entrada y salida

 Variables locales
  + Cola: 
	- Significado: lista de elementos
  + N1: 
	- Significado: número natural

  + Y: 
	- Significado: elemento
*/

veces_bis(_,[],0).

veces_bis(X,[X|Cola],N):-
			!,
			veces_bis(X,Cola,N1),
			N is N1 + 1.
				
veces_bis(X,[_|Cola],N):-
			veces_bis(X,Cola,N).
				
