====== 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á.