Prolog

Esta sección de mi sitio está dedicada a divulgar mis trabajos de Inteligencia Artificial (IA) programados en Prolog. Para poder ejecutar ambos códigos de IA, se debe tener instalado el swi-prolog desde http://www.swi-prolog.org antes de descargar susodichos códigos. Otro requisito es saber ejecutar un programa en Prolog.

  1. El primero que aquí les presento sirve para calcular la permutación eN-ésima de una lista dada.
  2. El segundo código que deseo presentarles es un programa que juega Master mind.

 

Permutación eN-ésima de una lista

generar_permutacion ( N, Lista, Lista_permutada).
Por ejemplo, si tenemos la lista [p, b, v, f], podemos calcular cualquiera de sus permutaciones específicas, sin necesidad de calcularlas todas:

1 ?- generar_permutacion( 4, [p, b, v, f], Lista_permutada).
Lista_permutada = [p, f, b, v]
2 ?- generar_permutacion( 16, [p, b, v, f], Lista_permutada).
Lista_permutada = [f, b, p, v]
3 ?- generar_permutacion( 7, [p, b, v, f], Lista_permutada ).
Lista_permutada = [b, p, v, f]
4 ?- generar_permutacion( 21, [p, b, v, f], Lista_permutada).
Lista_permutada = [v, b, f, p]

Este programa mío NO se debe confundir con el sencillo predicado que calcula todas las permutaciones de una lista. Que es el siguiente breve código:

permutacion( Bs, [ A| As]):-
concatenar( Xs, [ A| Ys], Bs),
concatenar( Xs, Ys, Zs),
permutacion( Zs, As).
permutacion([], []).

concatenar( [], L, L).
concatenar( [X| L1], L2, [ X| L3]):-
concatenar( L1, L2, L3).

Master mind
Siempre adivina la combinación. Presupongo que ustedes conocen este juego. Basta con seleccionar cuatro números de un total de seis números de 0 a 5. Por ejemplo supongamos que tenemos la combinación: 5 3 0 4. La máquina debe adivinarla con dos pistas que le suministramos, por cada intento.

1 ?- master_mind.
juego de ingenio
master mind

combinación propuesta: [1,3,5,4]
¿Digito correcto y lugar correcto?:    2.
¿Dígito correcto y lugar incorrecto?:  |: 1.
intento:  1
—————–

combinación propuesta: [3,0,5,4]
¿Digito correcto y lugar correcto?:    |: 1.
¿Dígito correcto y lugar incorrecto?:  |: 3.
intento:  2
—————–
combinación propuesta: [5,3,0,4]
¿Digito correcto y lugar correcto?:    |: 4.
¿Dígito correcto y lugar incorrecto?:  |: 0.
intento:  3
—————–

¡¡¡¡Solución!!!!