====== Examen Parcial - 75.23. Inteligencia Artificial - 08/06/06 ======
**Cátedra:** Cabrera\\
**Fecha:** Primera Oportunidad - Primer Cuatrimestre 2007\\
**Día:** 08/06/2007
===== Enunciado =====
- Hacer predicado que devuelva en una lista los enteros <= N y mayor que 0
- Ej: g(3,L) => L=[3,2,1]
- Ej: g(0,L) => L=[]
- Obtener la profundidad de una lista genérica.
- Hacer un predicado que reemplaza un elemento por otro en una lista.
- Ej: reemplaza ([a,b,c,d,e,f,g,h,d], d,x,L) => L=[a,b,c,x,e, f,g,h,x]
- Hacer predicado que determina si dos elementos están adyacentes en una lista (al derecho o invertidos).
===== Resolución =====
%Ej.1
Domains
lent = integer*
Predicates
nondeterm Menores (integer, lent)
clauses
Menores (0, []).
Menores (N, [N|L]):- N > 0, N1=N-1, Menores (N1, L).
goal
Menores (5, X1),
%Ej.2
Domains
lista = elemento*
elemento = e(symbol); l(lista)
Predicates
nondeterm Prof (lista, integer, integer)
nondeterm Mayor (integer, integer, integer)
clauses
Prof ([], N, N).
Prof ([l(Ca)|Co], N,P):- N1=N+1, Prof (Ca, N1, P1), Prof (Co, N, P2), Mayor (P1, P2, P).
Prof ([e(_)|Co],N, P):- Prof (Co, N, P1), Mayor (N, P1, P).
Mayor (A, B, X):- A >= B, X = A.
Mayor (A, B, X):- B > A, X = B.
goal
Prof ([e(a), e(b), l([e(c), e(d), e(e), l([e(f), e(g)]), e(h)]), e(i), l([e(j), e(k)]), e (l)], 1, X).
%Ej.3
Domains
Lsym = symbol*
Predicates
nondeterm Reemp (Lsym, symbol, symbol, Lsym)
clauses
Reemp ([],_,_,[]).
Reemp ([Ca1|Co1],Ca1, Ca2,[Ca2| Co2]):-Reemp( Co1,Ca1,Ca2, Co2).
Reemp ([Ca1|Co1],X, Y,[Ca1|Co2] ):-X<>Ca1, Reemp(Co1, X,Y,Co2).
goal
Reemp ([a,b,c,d,e, f,g,h],d, x,L).
%Ej.4
Domains
Lsym = symbol*
Predicates
nondeterm Juntos (Lsym, symbol, symbol)
clauses
Juntos ([Ca1|[Ca2|_ ]], Ca1, Ca2).
Juntos ([Ca1|[Ca2|_ ]], Ca2, Ca1).
Juntos ([_|[Ca2|Co] ], A, B):- Juntos ([Ca2|Co], A, B).
goal
Juntos ([a,b,c,d,e,f,g,h],d, c).
===== Discusión =====
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.