TRANSPARENCIAS TEMA 4


Aplicaciones actuales del Lenguaje PROLOG

Inteligencia Artificial (OCHO REINAS)

ANALOGÍA

COMPILADORES

Miscelánea

Bibliografía


Aplicaciones actuales del Lenguaje PROLOG


[Índice]


Inteligencia Artificial

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]


ANALOGÍA

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]


COMPILADORES

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]


Miscelánea

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:

    1. hanoi(N)<-mover(N,izquierda,medio,derecha).
    2. mover(1,A,_,C)<-Pasar disco de A a C.
    3. mover(N,A,B,C)<-mover(N-1,A,C,B), mover(1,A,C), mover(N-1,B,A,C).

 


[Í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]