Aplicaciones actuales del Lenguaje PROLOG
Inteligencia Artificial (OCHO REINAS)
Aplicaciones actuales del Lenguaje PROLOG
[
Índice]PROBLEMA DE LAS OCHO REINAS
domains
lista=integer*
predicates
rango(integer, integer, lista)
nondeterm dame(integer, lista, lista)
nondeterm permuta(lista, lista)
atacada(integer, integer, lista)
correcta(lista)
nondeterm reina(integer, lista)
clauses
rango(N, N, [N]):-!.
rango(N, M, [N|Cola]):-N<M, Aux=N+1, rango(Aux, M, Cola).
dame(X,[X|Xs],Xs).
dame(X,[Y|Ys],[Y|Zs]):-dame(X,Ys,Zs).
permuta([],[]).
permuta(L,[Z|Zs]):-dame(Z,L,Ys), permuta(Ys,Zs).
atacada(X,N,[Y|Ys]):-X=Y+N, !; X=Y-N, !.
atacada(X,N,[_|Ys]):-N1=N+1, atacada(X,N1,Ys).
correcta([]):-!.
correcta([X|Y]):-correcta(Y), not (atacada(X, 1, Y)).
reina(N, Solucion):-rango(1,N,L1), permuta(L1,Solucion), correcta(Solucion).
goal
write("Tamaño tablero = "), readint(N),
nl,
write("Soluciones: "), nl,
reina(N, Solucion),
write(Solucion),nl, fail.
[
Índice]SOLUCIÓN
domains
disposicion= dentro(symbol, symbol);
fuera(symbol, symbol)
lista=disposicion*
test=determ (integer, disposicion) - (i, o)
predicates
figuras(integer, disposicion, disposicion, disposicion)
respuestas(integer, lista)
esta(disposicion, lista)
casar(disposicion, disposicion)
analogia(disposicion, disposicion, disposicion, disposicion, lista)
test_analogia: test
clauses
figuras(1, dentro(cuadro, triangulo), dentro(triangulo, cuadro), dentro(circulo, cuadro)):-!.
figuras(2, dentro(cuadro, triangulo), dentro(triangulo, cuadro), dentro(circulo, cuadro)).
respuestas(1, [dentro(circulo, triangulo), dentro(cuadro, circulo), dentro(triangulo, cuadro)]):-!.
respuestas(2, [dentro(circulo, triangulo), dentro(circulo, cuadro), dentro(triangulo, cuadro)]).
esta(X, [X|_]):-!.
esta(X, [_|Y]):-esta(X,Y).
casar(dentro(F1, F2), dentro(F2, F1)):-!.
casar(fuera(F1, F2), fuera(F2, F1)).
analogia(A, B, C, X, Respuestas):-casar(A, B),
casar(C, X),
esta(X, Respuestas).
test_analogia(Numero, X):-figuras(Numero, A, B, C),
respuestas(Numero, Respuestas),
analogia(A, B, C, X, Respuestas).
goal
write("Dame número de test: [1,2]: "),
readint(N),
test_analogia(N, X),
write(X).
analogia(es_a(A, B), como_es_a(C, X), Respuestas):-casar(A, B),
casar(C, X),
esta(X, Respuestas).
[
Índice]domains
lista=char*
predicates
inicial(symbol)
final(symbol)
delta(symbol, char, symbol)
aceptar(lista, symbol)
acepto(lista)
clauses
inicial(q0).
final(q0).
delta(q0, 'a', q1).
delta(q1, 'b', q0).
acepto(L):-inicial(Q), aceptar(L,Q).
aceptar([X|Y], Q):-delta(Q, X, Q1), aceptar(Y, Q1).
aceptar([],Q):-final(Q).
goal
write("Dame lista de símbolos: "), readterm(lista, L),
acepto(L),
nl,
write("Pertenece al lenguaje").
[
Índice]TORRES DE HANOI
El problema de las torres de Hanoi consiste en mover un conjunto de discos de un palo a otro palo utilizando un palo auxiliar situado en medio. Las reglas para mover los discos son las siguientes:
[
Índice]Bibliografía
[Russell, 1996]
Russell, Stuart. Norvig, Peter. "Inteligencia Artificial. Un enfoque moderno". Editorial Prentice Hall. 1996.
[Shapiro, 1986]
E. Shapiro y L. Sterling. "The art of Prolog". The MIT Press, 1986
[
Índice]