Programación lógica con listas

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Programación lógica con listas"

Transcripción

1 Ingeniería Informática Ingeniería Técnica en Informática de Sistemas Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

2 Contenido 1. Programación básica con listas 2. Generar/comprobar con listas 2

3 Programación básica con listas

4 Definición de listas Sea D un dominio o tipo base Definición: el conjunto de listas L de D se define inductivamente 1. nil L (lista vacía) [base] 2. si L L D D, entonces D :: L L [recursivo] :: es un constructor infijo: D L L primer argumento es la cabeza, el segundo la cola Ejemplo: a :: b :: c :: nil 1 :: 2 :: 3 :: 4 :: nil (a :: nil) :: (b :: c :: nil) :: nil 4

5 Representación Prolog de las listas Necesitamos términos recursivos para representar listas Seguimos la definición inductiva de L: 1. nil L (lista vacía) [base] 2. si L L D D, entonces D :: L L [recursivo] Caso base constante [] Caso recursivo estructura functor./2.(cabeza, Cola) Una lista bien formada es un término generado por la gramática: L ::= [].(T,L) donde T es un término Prolog 5

6 Prolog no tiene tipos Las listas así definidas tienen el término como tipo base:.(a,.(b,.(c, []))).(a,.(1,.(f(x,y), []))).(.(a,.(b, [])),.(t(u,c),[]) ) En general, los contenedores tendrán el término como tipo base Ventajas: Prolog es polimórfico Inconvenientes: Prolog es inseguro 6

7 Endulzando las listas Prolog añade azúcar sintáctico para mejorar la legibilidad: L ::= [] % vacía [T 1, T 2,, T n ] % n elementos [T 1, T 2,, T n L] % al menos n elementos Ejemplo: prefijo cola.(a,.(b,.(c,[]))) [a,b,c].(a,.(1,.(f(x,y), []))) [a,1,f(x,y)].(.(a,.(b,[])),.(t(u,c),[]) ) [[a,b],[t(u,c)]] 7

8 Azúcar según el gusto la lista.(a,.(b,.(c,[]))) puede representarse de varias formas equivalentes: [a,b,c] [a,b,c []] [a,b [c]] [a [b,c]] [a [b [c] ]] [a [b [c [] ]]] Cuidado: después del la tiene que haber una lista 8

9 Plantillas de listas (I) Qué representa cada una de estas listas? [X] [X,Y] [X,X] [X [Y]] [X Xs] [a As] [X,Y Zs] [Xs Xs] [Xs a] 9

10 Plantillas de listas (y II) Qué representa cada una de estas listas? [X] [X,Y] [X,X] [X [Y]] [X Xs] [a As] [X,Y Zs] [Xs Xs] [Xs a] listas de un elemento listas de dos elementos listas de dos elementos iguales listas de dos elementos (equivale a [X,Y]) listas de al menos un elemento listas que empiezan por a listas de al menos dos elementos listas cuyo primer elemento es una lista que coincide con la cola (ej. [[1,2,3], 1, 2, 3]) no es una lista, después de debe haber una lista 10

11 Unificación de listas las listas deben unificar elemento a elemento hay que rescribir las listas colocando la en la misma posición (el prefijo más corto) Ejemplo: [X Y] [X Y] [a,b,c] [a [b,c]] { X / a, Y / [b,c] } [X, Y Ys] [X [Y Ys]] [a Zs] [a Zs] { X / a, Zs / [Y Ys] } 11

12 Ejercicios Unificar los siguientes pares de listas: 1. [X Y] [a,b,c] 2. [a,[b,c]] [X Y] 3. [[a,b],c] [X Y] 4. [a X] [Y a] 5. [a X] [Y [c]] 6. [a X] [Y] 7. [a,b,x] [X T] 8. [a,b Y] [X,T] 9. [a,b [Y]] [a,b,c] 10. [a,b [Y]] [a,b,c,d] 12

13 Definición de dominio Seguimos la definición inductiva de L: nil L (lista vacía) [base] si L L D D, entonces D :: L L [recursivo] Utilizaremos la sintaxis simplificada: % es_lista(?xs) es_lista([]). es_lista([x Xs]) :- es_lista(xs). % base % recursivo Notación: variables acaban en s cuando deben ser listas; ej: Xs Ejercicio: Define es_lista_de_naturales/1 13

14 Comprobando y generando listas?- es_lista([a,2+3,t(x)]). % test Yes?- es_lista([a,x c]). % test No?- es_lista(xs). % generador no acotado Xs = [] ; Xs = [_G308] ; Xs = [_G308, _G311] ; Xs = [_G308, _G311, _G314] 14

15 El predicado longitud/1 (I) longitud(+xs,?n) la lista Xs tiene N elementos Ejemplo:?- longitud([a,b,c], 3). % test Yes?- longitud([a,b,c],n). % generador único N = 3 ; No 15

16 El predicado longitud/1 (II) longitud(+xs,?n) la lista Xs tiene N elementos Aplicamos recursión sobre la lista Xs: longitud([],?) :-... longitud([x Xs],? ) :

17 El predicado longitud/1 (III) longitud(+xs,?n) la lista Xs tiene N elementos El caso base es trivial: longitud([],0). longitud([x Xs],? ) :

18 El predicado longitud/1 (y IV) longitud(+xs,?n) la lista Xs tiene N elementos El caso recursivo es muy simple (patrón recursivo): longitud([],0). longitud([x Xs], N) :- longitud(xs,t), % reducir y resolver N is T+1. % componer Cómo sería recursivo de cola? 18

19 El predicado longitud/1 recursivo de cola longitud(+xs,?n) la lista Xs tiene N elementos Basta aplicar directamente el patrón: longitud(xs,n) :- long_cola(xs,0,n). long_cola([],n,n). long_cola([x Xs],Ac,N) :- Ac1 is Ac+1, long_cola(xs,ac1,n). Ejercicio: compara las tablas de comportamiento de las versiones recursiva y recursiva de cola 19

20 Ejercicios Define versiones recursivas y recursivas de cola de los siguientes predicados sobre listas de números: 1. suma(+xs,?n), N es la suma de los elementos de Xs 2. maximo(+asmbs,?m), M es el máximo de AsMsBs 3. minimo(+asmbs,?m), M es el mínimo de AsMsBs 4. cuantas(+x,+asxbs,?n), X aparece N veces en AsXBs 5. escalar(+xs,+ys,?p), P es el producto escalar de Xs y Ys 6. rango(+x,+y,?ls), Ls es la lista con los enteros entre X e Y 20

21 El predicado miembro/2 (I) miembro(?x,?xs) X pertenece a la lista Xs Cómo aplicamos recursión sobre la lista? miembro(x,?):-... miembro(x,?):-... % base % recursivo Cuál es el caso base? 21

22 El predicado miembro/2 (II) miembro(?x,?xs) X pertenece a la lista Xs Caso base: he encontrado el elemento miembro(x,[x Xs]). miembro(x,?):-... % base % recursivo sólo puedo inspeccionar la cabeza de la lista suponemos que Xs es una lista 22

23 El predicado miembro/2 (y III) miembro(?x,?xs) X pertenece a la lista Xs Caso recursivo: puede estar en el resto de la lista miembro(x,[x Xs]). % base miembro(x,[y Xs]):- miembro(x,xs). % recursivo Los casos base y recursivo no son excluyentes 23

24 Usos de miembro/2?- miembro(b,[a,b,c]). % test Yes?- miembro(x,[a,b,c]). % generador acotado X = a ; X = b ; X = c ; No?- miembro(a,xs). % generador no acotado Xs = [a _G323] ; Xs = [_G322, a _G326] ; Xs = [_G322, _G325, a _G329]... 24

25 Tabla de comportamiento de miembro/2 miembro(x,asxbs) Uso Comportamiento Significado (+,+) test X AsXBs (-,+) generador acotado {X X AsXBs} (+,-) generador no acotado AsXBs= [_,..., _, X _] (-,-) generador no acotado AsXBs= [_,..., _, X _] Notación: el nombre AsXBs refleja la estructura del término: una lista que contiene X Ejercicio: Construir la tabla utilizando como caso base miembro(x,[x Xs]) :- es_lista(xs). 25

26 El predicado prefijo/2 (I) prefijo(?xs,?xsys) Xs es prefijo de XsYs Se puede razonar: aplicando el patrón: reducir, resolver, componer (hacia atrás) operacionalmente, recorriendo Xs (hacia delante) Lo resolveremos de ambas formas 26

27 El predicado prefijo/2 (II) prefijo(?xs,?xsys) Xs es prefijo de XsYs Aplicamos recursión sobre el primer argumento: prefijo([],?) :-... prefijo([x Xs],?) :-... % base % recursivo Caso base: de qué listas es prefijo la lista vacía? 27

28 El predicado prefijo/2 (III) prefijo(?xs,?xsys) Xs es prefijo de XsYs Caso base: la lista vacía es prefijo de cualquier lista prefijo([],ys). prefijo([x Xs],?) :-... % base % recursivo Caso recursivo: reducir, resolver y componer 28

29 El predicado prefijo/2 (IV) prefijo(?xs,?xsys) Xs es prefijo de XsYs Caso recursivo: reducir y resolver son triviales prefijo([],ys). prefijo([x Xs],?) :- prefijo(xs,xsys). % base % recursivo Caso recursivo: componer supongamos que Xs es prefijo de XsYs de qué listas es prefijo [X Xs]? 29

30 El predicado prefijo/2 (V) prefijo(?xs,?xsys) Xs es prefijo de XsYs prefijo([],ys). prefijo([x Xs],[X XsYs]):- prefijo(xs,xsys). % base % recursivo También se puede razonar operacionalmente 30

31 El predicado prefijo/2 (VI) prefijo(?xs,?xsys) Xs es prefijo de XsYs Recorremos la primera lista de la cabeza a la cola: prefijo([x Xs],?) :-... Si la primera lista comienza con X, por qué debe empezar la segunda lista? 31

32 El predicado prefijo/2 (VII) prefijo(?xs,?xsys) Xs es prefijo de XsYs La segunda también debe comenzar por X: prefijo([x Xs],[X XsYs]) :-... Ya hemos comprobado que las cabezas coinciden: y los restos? 32

33 El predicado prefijo/2 (VIII) prefijo(?xs,?xsys) Xs es prefijo de XsYs Continuamos recorriendo la lista para comprobar el resto: prefijo([x Xs],[X XsYs]) :- prefijo(xs,xsys). Cuando acabamos? 33

34 El predicado prefijo/2 (IX) prefijo(?xs,?xsys) Xs es prefijo de XsYs Cuando hayamos recorrido completamente la primera lista: prefijo([],ys). prefijo([x Xs],[X XsYs]) :- prefijo(xs,xsys). 34

35 El predicado prefijo/2 (y XI) prefijo(?xs,?xsys) Xs es prefijo de XsYs Podemos representar gráficamente el razonamiento operacional: XsYs [X1 X1s] Ys [X1 X1s] Xs Idea: ir comparando ambas listas por la cabeza, hasta agotar Xs 35

36 Usos de prefijo/2?- prefijo([a,b,c],[a,b,c]). % test Yes?- prefijo(ps,[a,b,c]). % generador acotado Ps = [] ; Ps = [a] ; Ps = [a, b] ; Ps = [a, b, c] ; No 14?- prefijo([a,b],xs). % generador único Xs = [a, b _G362] ; No 36

37 Tabla de comportamiento de prefijo/2 prefijo(?xs,?xsys) Uso Comportamiento Significado (+,+) test comprueba Xs es prefijo de XsYs (-,+) generador acotado genera prefijos de XsYs (+,-) generador único dada Xs= [t 1,,t n ], genera XsYs= [t 1,, t n _] (-,-) generador no acotado genera Xs= [V 1,,V n ] XsYs= [V 1,,V n _] Ejercicio: construir la tabla de comportamiento que se obtiene al añadir la comprobación de dominio (es_lista/1) al caso base 37

38 El predicado sufijo/2 (I) sufijo(?xs,?ysxs) Xs es sufijo de YsXs Lo más fácil es razonar operacionalmente (hacia delante): Ys eliminar YsXs Xs Xs Idea: eliminar elementos de la cabeza de YsXs hasta obtener Xs 38

39 El predicado sufijo/2 (y II) sufijo(?xs,?ysxs) Xs es sufijo de YsXs sufijo(xs,xs). % son iguales sufijo(xs,[y YsXs]) :- sufijo(xs,ysxs). % eliminar cabeza 39

40 Usos de sufijo/2?- sufijo(ss,[a,b]). % generador acotado Ss = [a, b] ; Ss = [b] ; Ss = [] ; No?- sufijo([a,b],xs). % generador no acotado Xs = [a, b] ; Xs = [_G346, a, b] ;...?- sufijo(xs,ys). % generador no acotado Xs = _G266 Ys = _G266 ; Xs = _G266 Ys = [_G331 _G266] ;... 40

41 Tabla de comportamiento de sufijo/2 sufijo(?xs,?ysxs) Uso Comportamiento Significado (+,+) test comprueba si Xs es sufijo de YsXs (-,+) generador acotado genera en Xs sufijos de YsXs (+,-) generador no acotado YsXs = [V1,,Vi Xs] i= 0 (-,-) generador no acotado Xs = V, YsXs =[V1,,Vi V] i= 0 41

42 El predicado selecciona/3 (I) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs hay que localizar X en AsXBs (similar a miembro/2) y eliminarlo aplicamos recursión sobre la lista AsXBs : selecciona(x,[x Bs],?) :-... selecciona(x,[a AsXBs],?) :

43 El predicado selecciona/3 (II) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs Caso base: trivial selecciona(x,[x Bs],Bs). selecciona(x,[a AsXBs],?) :-... Caso recursivo: reducir, resolver, componer 43

44 El predicado selecciona/3 (III) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs Caso recursivo: reducir y resolver son directos selecciona(x,[x Bs],Bs). selecciona(x,[a AsXBs],?) :- selecciona(x,asxbs,asbs). en qué consiste componer? 44

45 El predicado selecciona/3 (y IV) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs selecciona(x,[x Bs],Bs). selecciona(x,[a AsXBs],[A AsBs]) :- selecciona(x,asxbs,asbs). Ejercicio: construye la tabla de comportamiento de selecciona/3 45

46 Usos de selecciona/3?- selecciona(a,[a,b,a,c],xs). % gen acotado Xs = [b, a, c] ; Xs = [a, b, c] ; No?- selecciona(a,xs,[b,c]). % gen acotado Xs = [a, b, c] ; Xs = [b, a, c] ; Xs = [b, c, a] ; No?- selecciona(x,[a,b,c,d],[a,c,d]). % gen único X = b ; No 46

47 Ejercicios Define los siguientes predicados sobre listas: 1. primero(?x,?xys), X es el primer elemento de XYs 2. ultimo(?x,?ysx), X es el último elemento de YsX 3. pri_y_ult(?x,?y,?xzsy), X e Y son primero y último de XZsY 4. adyacentes(?x,?y,?asxybs), A y B son adyacentes en AsXYBs 5. todos_iguales(?xs), Xs tiene todos los elementos iguales 6. iesimo(+i,?asxbs,?x), X es el I-ésimo elemento de AsXBs 7. sublista(?xs,?asxsbs), Xs es sublista de AsXsBs 47

48 El predicado concatena/3 (I) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys Aplicamos recursión sobre el primer argumento: concatena([], Ys,?) :-... concatena([x Xs], Ys,?) :

49 El predicado concatena/3 (II) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys Caso base: trivial concatena([], Ys, Ys). concatena([x Xs], Ys,?) :-... Caso recursivo: reducir, resolver y componer 49

50 El predicado concatena/3 (III) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys Caso recursivo: reducir y resolver concatena([], Ys, Ys). concatena([x Xs], Ys,?) :- concatena(xs,ys,xsys). Si Xs concatenado con Ys es XsYs, Qué se obtiene al concatenar [X Xs] con Ys? 50

51 El predicado concatena/3 (y IV) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys concatena([], Ys, Ys). concatena([x Xs], Ys, [X XsYs]) :- concatena(xs,ys,xsys). A qué predicado de la aritmética de Peano se parece? 51

52 Usos de concatena/3?- concatena([a,b],[c,d],xs). % gen único Xs = [a, b, c, d] ; No?- concatena(xs,[c,d],[a,b,c,d]). % gen único Xs = [a, b] ; No?- concatena(xs,ys,[a,b,c]). % gen acotado Xs = [] Ys = [a, b, c] ; Xs = [a] Ys = [b, c] ; Xs = [a, b] Ys = [c] ; Xs = [a, b, c] Ys = [] ; No 52

53 Tabla de comportamiento de concatena/3 concatena(?xs,?ys,?xsys) Uso Comportamiento Significado (+,+,+) test Xs concatenada con Ys es XsYs (+,+,-) generador único dadas Xs = [X1,,Xn], Ys = [Y1,,Ym] genera XsYs = [X1,,Xn,Y1,,Ym] (-,+,+) generador único dadas XsYs = [X1,,Xn,Y1,,Ym], Ys = [Y1,,Ym] genera Xs = [X1,,Xn] (+,-,+) generador único similar a (-,+,+) (-,-,+) generador acotado dada XsYs = [T1,,Tn], i=0..n genera Xs = [T 1,,T i ] Ys = [T i+1,,t n ] 53

54 Ejercicios Define los siguientes predicados empleando concatena/3: 1. primero(?x,?xys), X es el primer elemento de XYs 2. ultimo(?x,?ysx), X es el último elemento de YsX 3. pri_y_ult(?x,?y,?xzsy), X e Y son primero y último de XZsY 4. adyacentes(?x,?y,?asxybs), X e Y son adyacentes en AsXYBs 5. prefijo(?xs,?xsys), Xs es prefijo de XsYs 6. sufijo(?xs,?ysxs), Xs es sufijo de XsYs 7. sublista(?xs,?asxsbs), Xs es sublista de AsXsBs 8. miembro(?x,?asxbs), X pertenece a la lista AsXBs 9. selecciona(?x,?asxbs,?asbs), AsBs resulta de eliminar X de AsXBs 54

55 El predicado inversa/2 (I) inversa(+xs,?sx) Sx es la inversa de Xs Aplicamos recursión sobre el primer argumento: inversa([],[]). inversa([x Xs],?) :- inversa(xs,sx),?. Si la inversa de Xs es Sx, cuál es la inversa de [X Xs]? 55

56 El predicado inversa/2 (y II) inversa(+xs,?sx) Sx es la inversa de Xs Hay que poner X al final de Sx: inversa([],[]). inversa([x Xs],SxX) :- % O(n 2 ) inversa(xs,sx), concatena(sx,[x],sxx). % O(n) Tiempo: O(n 2 ) Cómo mejorar la eficiencia? aplicar recursión de cola 56

57 inversa/2 con recursión de cola (I) inversa(+xs,?sx) Sx es la inversa de Xs inversa(xs,sx) :- inversa_cola(xs,[],sx). inversa_cola([],sx,sx). inversa_cola([x Xs],Is,Sx) :- actualizar(x,is,xis), inversa_cola(xs,xis,sx). En qué consiste actualizar? 57

58 inversa/2 con recursión de cola (y II) inversa(?xs,?sx) Sx es la inversa de Xs inversa(xs,sx) :- inversa_cola(xs,[],sx). inversa_cola([],sx,sx). inversa_cola([x Xs],Is,Sx) :- inversa_cola(xs,[x Is],Sx). Tiempo: O(n) La recursión de cola reduce el consumo de memoria y tiempo 58

59 El predicado borrar/3 (I) borrar(+x,+as,?bs) borra todas las X de As, dando Bs Aplicamos recursión a As: borrar(x,[],[]). borrar(x,[a As],?) :-... % base % recursivo En el caso recursivo: no puedo emplear unificación (X y As están en modo +) lo que se haga depende de si X y A son el mismo término qué predicado de comparación debo utilizar? 59

60 El predicado borrar/3 (y II) borrar(+x,+as,?bs) borra todas las X de As, dando Bs El caso recursivo se divide en dos casos: borrar(x,[],[]). borrar(x,[a As],Bs) :- X == A, borrar(x,as,bs). borrar(x,[a As],[A Bs]) :- X \== A, borrar(x,as,bs). % base % borrar A % conservar A 60

61 Ejercicios Define los siguientes predicados (sin unificar en modo +): 1. esta(+x,+asxbs), X está en AsXBs 2. no_esta(+x,+asbs), X no está en AsBs 3. purga(+xxss,?xs), Xs resulta de eliminar elementos repetidos de XXss 4. borra_una(+x,+as,?bs), borra una X de As, dando Bs 5. borra_algunas(+x,+as,?bs), borra algunas X de As, dando Bs 6. borra_al_menos_una(+x,+as,?bs), borra al menos una X de As, dando Bs 7. borra_pri(+x,+as,?bs). borra la primera X de As, dando Bs 8. borra_ult(+x,+as,?bs), borra la última X de As, dando Bs 61

62 El predicado quicksort/2 quicksort(+as,?os) Os es As ordenada por quicksort Aplicamos recursión sobre As: quicksort([],[]). quicksort([a As], Os) :- partir(a,as,menorigs,mayores), quicksort(menorigs,omenorigs), quicksort(mayores,omayores), concatena(omenorigs,[a OMayores],Os). Cómputo = Deducción controlada Algoritmo 62

63 El predicado partir/3 partir(+pivote,+as,?menorigs,?mayores) parte As en MenorIgs y Mayores respecto a Pivote Aplicamos recursión sobre As: partir(pivote,[],[],[]). partir(pivote,[a As],[A MenorIgs],Mayores) :- Pivote, partir(pivote,as,menorigs,mayores). partir(pivote,[a As],MenorIgs,[A Mayores]) :- Pivote, partir(pivote,as,menorigs,mayores). 63

64 Ejercicios Define los siguientes predicados de ordenación: 1. burbuja(+as,?os) 2. insercion(+as,?os) 3. mezcla(+as,?os) 4. quicksort_azar(+as,?os) ordena por quicksort, seleccionando el pivote al azar (emplea la función random/1) 64

65 El predicado permutacion/2 (I) permutacion(+xs,?ys) Ys es una permutación de Xs Aplicamos recursión sobre Xs: permutacion([],[]). % base permutacion([x Xs],?) :- % recursivo permutacion(xs,ys), % reducir + resolver? % componer Componer: añadir X a Ys en qué posición? 65

66 El predicado permutacion/2 (y II) permutacion(+xs,?ys) Ys es una permutación de Xs Hay que añadir X a Ps en todas las posiciones posibles: permutacion([],[]). permutacion([x Xs],Ys) :- permutacion(xs,ps), selecciona(x,ys,ps). % base % recursivo % reducir + resolver % componer 66

67 El predicado combinacion/3 (I) combinacion(+xs,+n,?cs) Cs es una combinación de N elementos de Xs Aplicamos recursión sobre N: combinacion(xs,0,[]). combinacion([x Xs],N,?) :- N > 0, % base % recursivo Caso recursivo: hay que distinguir dos posibilidades, según X forme parte o no de la combinación Cs 67

68 El predicado combinacion/3 (y II) combinacion(+xs,+n,?cs) Cs es una combinación de N elementos de Xs combinacion(xs,0,[]). combinacion([x Xs],N,[X Cs]) :- N > 0, N1 is N-1, combinacion(xs,n1,cs). combinacion([x Xs],N,Cs) :- N > 0, combinacion(xs,n,cs). % base % X Cs % X Cs 68

69 Generar/comprobar con listas

70 El prefijo más largo que suma N (I) Problema: aplicando generar/comprobar, define un predicado premax(+psxs,+n,?ps) que se satisface cuando Ps es el prefijo no vacío más largo de PsXs tal que la suma de sus elementos no supera N Ejemplo:?- premax([1,2,3,4,5,6],12,ps). Ps = [1,2,3,4] ; No 70

71 El prefijo más largo que suma N (II) Necesitamos un generador de prefijos: premax(psxs,n,ps) :- prefijo(ps,psxs), % generar... % comprobar Qué condiciones debe verificar Ps? 1. no es vacío 2. la suma de sus elementos no supera N 3. es el más largo posible 71

72 El prefijo más largo que suma N (III) El prefijo no puede ser vacío: premax(psxs,n,[p Ps]) :- prefijo([p Ps],PsXs), % generar... % comprobar 72

73 El prefijo más largo que suma N (IV) La suma de los elementos de [P Ps] no puede superar N: premax(psxs,n,[p Ps]) :- prefijo([p Ps],PsXs), suma([p Ps],S), S =< N,... % generar % comprobar [P Ps] debe ser el prefijo más largo con estas condiciones 73

74 El prefijo más largo que suma N (y V) [P Ps] no puede crecer sin violar las condiciones: premax(psxs,n,[p Ps]) :- concatena([p Ps],Xs,PsXs), suma([p Ps],S), S =< N, no_crece(s,n,xs). % generar % comprobar no_crece(_,_,[]). no_crece(s,n,[x _]) :- S + X > N. 74

75 La secuencia mágica (I) Problema: definir un predicado secuencia(?xs) que genere todas las secuencias de dígitos entre 1 y 9 tales que: 1) todos los dígitos aparecen tres veces 2) las tres apariciones del dígito i están separadas entre sí por i dígitos Ejemplo: 1, 9, 1, 2, 1, 8, 2, 4, 6, 2, 7, 9, 4, 5, 8, 6, 3, 4, 7, 5, 3, 9, 6, 8, 3, 5, 7 Qué longitud tiene la lista Xs? Solución: aplicando generar/comprobar, construimos listas que satisfagan todas las condiciones 75

76 La secuencia mágica (y II) secuencia(xs) :- % Xs = lista de 27 variables libres Xs = [_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_], % restricciones sublista([1,_,1,_,1],xs), sublista([2,_,_,2,_,_,2],xs), sublista([3,_,_,_,3,_,_,_,3],xs), sublista([4,_,_,_,_,4,_,_,_,_,4],xs), sublista([5,_,_,_,_,_,5,_,_,_,_,_,5],xs), sublista([6,_,_,_,_,_,_,6,_,_,_,_,_,_,6],xs), sublista([7,_,_,_,_,_,_,_,7,_,_,_,_,_,_,_,7],xs), sublista([8,_,_,_,_,_,_,_,_,8,_,_,_,_,_,_,_,_,8],xs), sublista([9,_,_,_,_,_,_,_,_,_,9,_,_,_,_,_,_,_,_,_,9],xs). 76

77 El problema de las N reinas (I) Problema: colocar N reinas en un tablero de ajedrez de manera que las reinas no se ataquen unas a otras Ejemplo: para N = 8, dónde ponemos la siguiente reina? 77

78 El problema de las N reinas (II) Solución: no hay solución analítica (incluso Gauss fracasó!), sólo podemos aplicar un método de prueba y error Aplicando generar/comprobar, definiremos un predicado reinas(+n,?solucion) que genere en Solucion todas las soluciones posibles La solución debe mostrar el emplazamiento de las N reinas Cómo representamos la solución? 78

79 El problema de las N reinas (III) Primera posibilidad: como una lista de coordenadas (fila,columna) [(X1,Y1), (X2,Y2),, (XN,YN)] Inconveniente: el espacio de búsqueda es demasiado grande para N = 8, tenemos unos candidatos posibles comprobando 1 millón de candidatos por segundo, llevaría 135 años Cómo reducir el espacio de búsqueda? 79

80 El problema de las N reinas (IV) Segunda posibilidad: El elemento i-ésimo de la lista representa la fila ocupada por la reina situada en la columna i-ésima 1 2 N columna Yi [X1, X2,, XN] Xi {1..N}, sin repet. [X1, X2,, XN] es una permutación de la lista [1,2,3,,N] tal que las reinas no se atacan (N! candidatos, 8! = 40320) Por construcción: sólo puede haber una reina en cada fila sólo puede haber una reina en cada columna sólo hay que evitar ataques diagonales 80

81 El problema de las N reinas (V) reinas(n,solucion) :- rango(1,n,filas), permutacion(filas,solucion), no_se_atacan(solucion). % generar % comprobar Cómo mejorar esta solución? 81

82 El problema de las N reinas (VI) Entrelazar generación y comprobación: cada vez que se coloque una reina, comprobar que no ataca a las ya colocadas Esto exige llevar cuenta de las reinas colocadas reinas(n,solucion) :- rango(1,n,disponibles), reinas(disponibles,[],solucion). colocadas Vamos tomando filas Disponibles y las ponemos en Colocadas, comprobando que no ataca a las anteriores 82

83 El problema de las N reinas (VII) % reinas(disponibles,colocadas,solucion) reinas([],solucion,solucion). reinas(disponibles,colocadas,solucion) :- selecciona(fila,disponibles,disponibles_1), no_ataca(fila,colocadas), reinas(disponibles_1,[fila Colocadas],Solucion). El tablero se rellena por columnas, de derecha (N) a izquierda (1) 83

84 El problema de las N reinas (y VIII) no_ataca(fila,colocadas) comprueba que la reina recién colocada no está en la misma diagonal que las anteriores no_ataca(fila,colocadas) :- no_ataca(fila,1,colocadas). no_ataca(_,_,[]). no_ataca(fila,n,[f Colocadas]) :- % N dist horiz. N =\= abs(fila - F), % dist. vertical N1 is N+1, no_ataca(fila,n1,colocadas). 84

Programación Declarativa Ejercicios de programación con listas

Programación Declarativa Ejercicios de programación con listas Programación Declarativa Ejercicios de programación con listas Ejercicio 1 Define versiones recursivas de los siguientes predicados sobre listas: es lista(xs) Xs es una lista bien formada es lista nat(ss)

Más detalles

Programación lógica con árboles. Introducción. Contenido. Introducción. 1. Programación con árboles 2. Otras estructuras arbóreas

Programación lógica con árboles. Introducción. Contenido. Introducción. 1. Programación con árboles 2. Otras estructuras arbóreas Contenido 1. Programación con árboles 2. Otras estructuras arbóreas Ingeniería Informática Ingeniería Técnica en Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Más detalles

Programación con Listas

Programación con Listas Capítulo 2 Programación con Listas En Prolog la estructura de lista está predefinida como una estructura recursiva lineal cuyas componentes pueden ser heterogéneas porque en Prolog no existe una comprobación

Más detalles

Programación con listas

Programación con listas Programación con Estructuras III.1 Programación con listas Unificación con listas. Dominio de definición Predicados sobre listas.tablas de comportamiento Predicados aritméticos con listas. Predicados iterativos

Más detalles

Programación recursiva en Prolog

Programación recursiva en Prolog Programación recursiva en Prolog Curso 2002/03, Fecha:14/12/2002 Enunciado 1 (naturales) El siguiente predicado define la suma de números naturales representados mediante la constante 0 y la función siguiente

Más detalles

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Programación Declarativa UNIVERSIDAD DE MÁLAGA Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA 17 de Febrero de 2005 Alumno: Grupo: Prolog Ejercicio 1 (a)(2 pts.) Realiza el árbol de búsqueda

Más detalles

Tema IV Programación lógica con estructuras

Tema IV Programación lógica con estructuras Tema IV Programación lógica con estructuras Programación Lógica - E.T.S.I. Informática - Málaga 1 Términos La estructura de datos básica en PROLOG es el término. Los términos se clasifican en : variables

Más detalles

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

Guía 2: Listas, recursión e inducción

Guía 2: Listas, recursión e inducción Introducción a los Algoritmos - 2do cuatrimestre 2014 Guía 2: Listas, recursión e inducción Docentes: Walter Alini, Luciana Benotti En esta guía comenzaremos a trabajar con listas Para familiarizarnos

Más detalles

Tipos de datos algebraicos

Tipos de datos algebraicos Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos

Más detalles

3.2. Control con cortes Operador corte Cortes verdes Cortes rojos

3.2. Control con cortes Operador corte Cortes verdes Cortes rojos 3. CONTROL en la PROGRAMACIÓN LOGICA 45 Tema 3. CONTROL en la PROGRAMACION LOGICA 3.1. Control mediante el Orden en literales y sentencias 3.2. Control con cortes 3.2.1. Operador corte 3.2.2. Cortes verdes

Más detalles

Listas en Prolog. Capítulo. Listas como sujetos

Listas en Prolog. Capítulo. Listas como sujetos Capítulo 5 Listas en Prolog Este capítulo introduce el concepto de lista, un tipo de dato de gran influencia dentro de la inteligencia artificial. Se comienza con una introducción a listas en Prolog y

Más detalles

Metodología de Programación I Tutorial Prolog 1/3

Metodología de Programación I Tutorial Prolog 1/3 Metodología de Programación I Tutorial Prolog 1/3 Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra

Más detalles

Programas Generate & Test

Programas Generate & Test Programas Generate & Test Son básicamente programas que generan soluciones candidatas que se evalúan para comprobar si son o no correctas En algunas ocasiones es más sencillo comprobar si algo es una solución

Más detalles

INDICACIONES PARA LA SOLUCIÓN A ALGUNOS PROBLEMAS DE LA RELACION 6. Se usarán los siguiente predicados genéricos en todos los ejemplos

INDICACIONES PARA LA SOLUCIÓN A ALGUNOS PROBLEMAS DE LA RELACION 6. Se usarán los siguiente predicados genéricos en todos los ejemplos INDICACIONES PARA LA SOLUCIÓN A ALGUNOS PROBLEMAS DE LA RELACION 6 PINTAR UN SOBRE COLOREADO DE MAPAS MOCHILA REINAS ENCASILLADO Se usarán los siguiente predicados genéricos en todos los ejemplos miembro(x,[x

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 1er cuatrimestre 2013 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,

Más detalles

Abstracción de procedimientos

Abstracción de procedimientos Abstracción de procedimientos 1.- Consideremos ABN (árboles binarios numéricos) sin nodos repetidos. Denimos los siguientes conceptos: Se pide: Dados dos ABN, A y B, decimos que B es SUBARBOL PRINCIPAL

Más detalles

Programación Declarativa Universidad de Málaga

Programación Declarativa Universidad de Málaga Programación Declarativa Universidad de Málaga 3. o de Ingeniería Informática E.T.S.I. Informática Enero de 2008 Tema 5. Programación lógica con árboles Ejercicios Ejercicio 1. Dada la siguiente representación

Más detalles

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n! Capítulo 3 Recursión La recursión es un estilo autoreferencial de definición usado tanto en matemática como en informática. Es una herramienta de programación fundamental, particularmente importante para

Más detalles

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL Ejercicios de programación en LISP y PROLOG prog-ia@dia.uned.es Dpto. Inteligencia Artificial E.T.S.I. Informática (UNED) C/ Juan del Rosal 16 28040

Más detalles

ESTRUCTURAS DE DATOS

ESTRUCTURAS DE DATOS ESTRUCTURAS DE DATOS Listas 1. Definir predicados Prolog referentes a listas con los siguientes significados: miembro(elem,lista) "Elem pertenece a Lista" longitud(lista,long) "Lista tiene Long elementos"

Más detalles

Estructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas

Estructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas Estructuras de Datos y Listas en PROLOG 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas 1. Estructuras y árboles Una estructura de datos en PROLOG se puede visualizar

Más detalles

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL Ejercicios de programación en LISP y PROLOG Angeles Manjarrés Riesco Severino Fernández Galán Jesús González Boticario prog-ia@dia.uned.es Dpto. Inteligencia

Más detalles

Estructuras incompletas. Listas diferencia.

Estructuras incompletas. Listas diferencia. Estructuras incompletas. Listas diferencia. 1 / 13 Estructuras incompletas Proporcionan una técnica de implementación muy potente propia de Prolog: Incrementan radicalmente la eficiencia de muchos programas.

Más detalles

Tema 13: Aplicaciones de programación funcional

Tema 13: Aplicaciones de programación funcional Tema 13: Aplicaciones de programación funcional Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de

Más detalles

Tema 2: Lenguajes Formales. Informática Teórica I

Tema 2: Lenguajes Formales. Informática Teórica I Tema 2: Lenguajes Formales Informática Teórica I Teoría de Lenguajes Formales. Bibliografía M. Alfonseca, J. Sancho y M. Martínez. Teoría de Lenguajes, Gramáticas y Autómatas, R.A.E.C., Madrid, (1998).

Más detalles

Metaprogramación. Ingeniería Informática. Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Metaprogramación. Ingeniería Informática. Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Contenido 1. Clasificación de términos 2. Inspección de estructuras 2 Clasificación de términos Clasificación

Más detalles

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog 5.3 Tipos de Datos en Prolog Objetos de Datos en Prolog Objetos de datos simples Objetos estructurados Calce de operaciones fundamentales sobre objetos 1 Tipos de Objetos de Datos Objetos de datos Objetos

Más detalles

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog 5.3 Tipos de Datos en Prolog Objetos de Datos en Prolog Objetos de datos simples Objetos estructurados Calce de operaciones fundamentales sobre objetos Tipos de Objetos de Datos Objetos de datos Objetos

Más detalles

Metodología de Programación I Tutorial Prolog 2/3

Metodología de Programación I Tutorial Prolog 2/3 Metodología de Programación I Tutorial Prolog 2/3 Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra

Más detalles

Una ecuación lineal de n-incógnitas es una igualdad de la forma:

Una ecuación lineal de n-incógnitas es una igualdad de la forma: página 1/39 Teoría Tema 6 Ecuación lineal Una ecuación lineal de n-incógnitas es una igualdad de la forma: a 1 x 1 +a 2 x 2 +a 3 x 3 +...+a n x n =c Donde a 1,a 2, a 3,..., a n,c son números reales. En

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

Programación n en Prolog

Programación n en Prolog Programación n Declarativa: Lógica y Restricciones Conceptos Básicos B de la Programación n en Prolog Mari Carmen Suárez de Figueroa Baonza mcsuarez@fi.upm.es Contenidos Unificación Estructuras de datos

Más detalles

CAPITULO 2: LENGUAJES

CAPITULO 2: LENGUAJES CAPITULO 2: LENGUAJES 2.1. DEFINICIONES PREIAS SIMBOLO: Es una entidad indivisible, que no se va a definir. Normalmente los símbolos son letras (a,b,c,.., Z), dígitos (0, 1,.., 9) y otros caracteres (+,

Más detalles

Matriz asociada a una transformación lineal respecto a un par de bases

Matriz asociada a una transformación lineal respecto a un par de bases Matriz asociada a una transformación lineal respecto a un par de bases Ejercicios Objetivos Comprender cómo se describe una transformación lineal (que actúa en espacios vectoriales de dimensiones finitas)

Más detalles

Algebra lineal y conjuntos convexos

Algebra lineal y conjuntos convexos Apéndice A Algebra lineal y conjuntos convexos El método simplex que se describirá en el Tema 2 es de naturaleza algebraica y consiste en calcular soluciones de sistemas de ecuaciones lineales y determinar

Más detalles

Algoritmos sobre Listas

Algoritmos sobre Listas TEMA 6 Algoritmos sobre Listas V1.1 Manuel Pereira González Agenda Introducción Algoritmos de Búsqueda Búsqueda Secuencial Búsqueda Binaria Análisis de Eficiencia Algoritmos de Inserción Algoritmos de

Más detalles

Contenido. Prólogo... Prólogo a la edición en español Argumentos y proposiciones lógicas Introducción

Contenido. Prólogo... Prólogo a la edición en español Argumentos y proposiciones lógicas Introducción CONTENIDO vii Contenido Prólogo... Prólogo a la edición en español... XVIl XXI 1 Cálculo proposicional... 1 1.1 Argumentos y proposiciones lógicas 1.1.1 Introducción 1 1 1.1.2 Algunos argumentos lógicos

Más detalles

ÁLGEBRA DE MATRICES TRASPUESTA DE UNA MATRIZ SUMA Y RESTA DE MATRICES

ÁLGEBRA DE MATRICES TRASPUESTA DE UNA MATRIZ SUMA Y RESTA DE MATRICES ÁLGEBRA DE MATRICES TRASPUESTA DE UNA MATRIZ La traspuesta de una matriz A consiste en intercambiar las filas por las columnas (o las columnas por las filas) y se denota por: A T Así, la traspuesta de

Más detalles

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión

Más detalles

Inteligencia Artificial II Prolog I

Inteligencia Artificial II Prolog I Inteligencia Artificial II Prolog I Dr. Alejandro Guerra-Hernández Universidad Veracruzana Centro de Investigación en Inteligencia Artificial mailto:aguerra@uv.mx http://www.uv.mx/personal/aguerra Maestría

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones para listas Patrones

Más detalles

Tema 6: Estructuras de datos recursivas

Tema 6: Estructuras de datos recursivas Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones

Más detalles

Propiedades de lenguajes independientes del contexto

Propiedades de lenguajes independientes del contexto Capítulo 12. Propiedades de lenguajes independientes del contexto 12.1. Identificación de lenguajes independientes del contexto Lema de bombeo. 12.2. Propiedades Cierre, Complemento de lenguajes, Sustitución,

Más detalles

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog 5.3 Tipos de Datos en Prolog Recocimiento de Tipos Se recoce el tipo de un dato por su forma sintáctica; se requiere de declaración de tipos Ejemplo: Variables se definen comienzan con primera en mayúsculas

Más detalles

Matrices. En este capítulo: matrices, determinantes. matriz inversa

Matrices. En este capítulo: matrices, determinantes. matriz inversa Matrices En este capítulo: matrices, determinantes matriz inversa 1 1.1 Matrices De manera informal una matriz es un rectángulo de números dentro de unos paréntesis. A = a 1,1 a 1,2 a 1,3 a 2,1 a 2,2 a

Más detalles

Práctica N o 1 - Programación Funcional

Práctica N o 1 - Programación Funcional Práctica N o 1 - Programación Funcional Para resolver esta práctica, recomendamos usar el Hugs 98, de distribución gratuita, que puede bajarse de http://www.haskell.org/hugs/. Ejercicio 1 Dado el siguiente

Más detalles

Profesor: José Miguel Rubio L.

Profesor: José Miguel Rubio L. Profesor: José Miguel Rubio L. Magíster en Ingeniería Informática Ingeniero Civil en Informática Licenciado en Ciencias de la Ingeniería Técnico en Programación Oficina: 3-20 e-mail 1: jose.rubio.l@ucv.cl

Más detalles

Producto Escalar. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Producto Escalar 1 / 31

Producto Escalar. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Producto Escalar 1 / 31 Producto Escalar AMD Grado en Ingeniería Informática AMD Grado en Ingeniería Informática (UM) Producto Escalar 1 / 31 Objetivos Al finalizar este tema tendrás que: Saber usar el producto escalar. Calcular

Más detalles

Suma de productos Producto de sumas. Fundamentos de los Computadores Grado en Ingeniería Informática

Suma de productos Producto de sumas. Fundamentos de los Computadores Grado en Ingeniería Informática 2. Simplificación de funciones booleanas: as Método de Karnaugh aug Suma de productos Producto de sumas Fundamentos de los Computadores Grado en Ingeniería Informática Introducción Los circuitos digitales

Más detalles

Programación: Construcción del polinomio interpolante con la fórmula de Newton

Programación: Construcción del polinomio interpolante con la fórmula de Newton Programación: Construcción del polinomio interpolante con la fórmula de Newton Se recomienda resolver estos ejercicios antes de la clase de programación. Objetivos. Programar la construcción del polinomio

Más detalles

GUÍA DE EJERCICIOS: MATEMÁTICAS

GUÍA DE EJERCICIOS: MATEMÁTICAS GUÍA DE EJERCICIOS: MATEMÁTICAS Matrices Esta guía de estudio está diseñada con ejercicios resueltos paso a paso con el fin de mostrar los procedimientos detallados para abordar cada uno de ellos. Las

Más detalles

1. Cadenas EJERCICIO 1

1. Cadenas EJERCICIO 1 LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 - BOLETÍN DE EJERCICIOS Víctor J. Díaz Madrigal y José Miguel Cañete Departamento de Lenguajes y Sistemas Informáticos 1. Cadenas La operación reversa aplicada

Más detalles

Algoritmo de la factorización LU

Algoritmo de la factorización LU Algoritmo de la factorización LU. Objetivo. Estudiar el algoritmo de la factorización LU de una matriz cuadrada invertible.. Requisitos: Matrices elementales y su relación con operaciones elementales.

Más detalles

Lenguajes y Gramáticas

Lenguajes y Gramáticas Lenguajes y Gramáticas Teoría de Lenguajes Fernando Naranjo Introduccion Se desarrollan lenguajes de programación basados en el principio de gramática formal. Se crean maquinas cada vez mas sofisticadas

Más detalles

Proyecto: El Problema de las 8 Torres

Proyecto: El Problema de las 8 Torres Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información CI-2125 Computación I Sep-Dic 2003 Introducción: Proyecto: El Problema de las 8 Torres El problema de colocar 8 reinas

Más detalles

Lenguajes, Gramáticas y Autómatas Conceptos

Lenguajes, Gramáticas y Autómatas Conceptos Lenguajes, Gramáticas y Autómatas Conceptos Departamento de Informática e Ingeniería de Sistemas C.P.S. Universidad de Zaragoza Última revisión: Febrero. 2004 11/02/2004 1 Índice Alfabetos, palabras y

Más detalles

Isabelle como un lenguaje funcional

Isabelle como un lenguaje funcional Capítulo 1 Isabelle como un lenguaje funcional 1.1 Introducción Nota 1.1.1. Esta notas son una introducción a la demostración asistida utilizando el sistema Isabelle/HOL/Isar. La versión de Isabelle utilizada

Más detalles

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión Ejemplo: QuickSort

Más detalles

Tema 6: Representación lógica del conocimiento

Tema 6: Representación lógica del conocimiento Inteligencia Artificial Curso 999 2000 Tema 6: Representación lógica del conocimiento José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Francisco J. Martín Mateos Dpto. de Ciencias de la Computación e

Más detalles

Apellidos: Nombre: 2º Grupo: _D _ Día: 22-XI-2011 CURSO

Apellidos: Nombre: 2º Grupo: _D _ Día: 22-XI-2011 CURSO MATEMATICAS CC SS 1ª EVALUACIÓN Apellidos: Nombre: º Grupo: _D _ Día: -XI-011 CURSO 011-1 OPCIÓN A 0 3 (a) (1, puntos) Dadas las matrices M y N t 3 0, razone cuales de las siguientes operaciones tienen

Más detalles

Generación de Código Intermedio

Generación de Código Intermedio Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede

Más detalles

LENGUAJES Y GRAMÁTICAS

LENGUAJES Y GRAMÁTICAS LENGUAJES Y GRAMÁTICAS Orlando Arboleda Molina Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle 20 de septiembre de 2008 Contenido Lenguajes y Gramáticas Gramáticas Gramáticas

Más detalles

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Programación Declarativa UNIVERSIDAD DE MÁLAGA Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA Septiembre de 2006 mbre: Especialidad: Prolog Grupo: Ejercicio 1.1 (1 punto) Realizad el árbol

Más detalles

RESUMEN DE ALGORITMOS PROBABILÍSTICOS

RESUMEN DE ALGORITMOS PROBABILÍSTICOS RESUMEN DE ALGORITMOS PROBABILÍSTICOS En los algoritmos probabilísticos hay ciertas decisiones que se toman al azar bajo condiciones estadísticamente estables como una distribución uniforme. Normalmente

Más detalles

Vectores en el plano UNIDAD I: MATRICES. Dirección de un vector. Sentido de un vector

Vectores en el plano UNIDAD I: MATRICES. Dirección de un vector. Sentido de un vector UNIDAD I: MATRICES Vectores en el plano Un vector,, es un segmento con una dirección que va del punto A (origen) al punto B (etremo).un vector es un segmento orientado que va del punto A (origen) al punto

Más detalles

Facultad de Química. Departamento de Química Analítica. Química Analítica Experimental I DIAGRAMA DE FLUJO. Joaquín Preza.

Facultad de Química. Departamento de Química Analítica. Química Analítica Experimental I DIAGRAMA DE FLUJO. Joaquín Preza. Universidad Nacional Autónoma de México Facultad de Química Departamento de Química Analítica Química Analítica Experimental I DIAGRAMA DE FLUJO Joaquín Preza Semestre 2010-1 Un diagrama de flujo es la

Más detalles

Tema II: Introducción al Lenguaje Funcional

Tema II: Introducción al Lenguaje Funcional Tema II: Introducción al Lenguaje Funcional Características de Haskell Lenguaje funcional de o. superior fuertemente tipificado. Clasifica los entes de un programa en: objetos (constantes y funciones)

Más detalles

Números naturales y recursividad

Números naturales y recursividad Números naturales y recursividad Rafael F. Isaacs G. * Fecha: 12 de abril de 2004 Números naturales Cuál es el primer conjunto de números que estudiamos desde la escuela primaria? Se sabe que los números

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema

Más detalles

Algoritmo de factorización LU

Algoritmo de factorización LU Algoritmo de factorización LU Objetivos. Estudiar el algoritmo de la factorización LU de una matriz cuadrada invertible. Requisitos. Matrices elementales y su relación con operaciones elementales, matriz

Más detalles

Temas. Objetivo. Símbolo, alfabeto. Hileras y operaciones con hileras. Operaciones con lenguajes

Temas. Objetivo. Símbolo, alfabeto. Hileras y operaciones con hileras. Operaciones con lenguajes 0 1 Temas Símbolo, alfabeto Hileras y operaciones con hileras Operaciones con lenguajes Objetivo Que el estudiante logre conocer, comprender y manejar conceptos vinculados con la Teoría de Lenguajes Formales

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /

Más detalles

Colegio San Agustín (Santander) Página 1

Colegio San Agustín (Santander) Página 1 Colegio San Agustín (Santander Página OPERACIONES CON MATRICES Dadas las matrices A= ( B= ( C= ( a Calcula (A+B C t b Comprueba que (A+B C t = AC t +BC t a (A+B C t = ( ( = ( b AC t +BC t = ( ( + ( ( =

Más detalles

Repartido 4. Profesor Fernando Díaz Matemática B 3ro EMT ISCAB 2016

Repartido 4. Profesor Fernando Díaz Matemática B 3ro EMT ISCAB 2016 Repartido 4 Profesor Fernando Díaz Matemática B 3ro EMT ISCAB 2016 VECTORES: MÓDULO, DIRECCIÓN Y SENTIDO Un vector es un segmento de recta orientado. Un vector se caracteriza por: 1) su módulo, que es

Más detalles

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013 Técnicas de diseño de algoritmos Algoritmos y Estructuras de Datos III Segundo cuatrimestre 2013 Técnicas de diseño de algoritmos Algoritmos golosos Backtracking (búsqueda con retroceso) Divide and conquer

Más detalles

Los modelos abstractos de cómputo. Tema 1: Introducción. El modelo transductor. El modelo reconocedor. ordenador. datos. Modelo Abstracto de Cómputo

Los modelos abstractos de cómputo. Tema 1: Introducción. El modelo transductor. El modelo reconocedor. ordenador. datos. Modelo Abstracto de Cómputo Tema 1: Introducción Preliminares Los Modelos Abstractos de Cómputo El principio de inducción Palabras y Lenguajes Palabras Operadores sobre palabras Predicados sobre palabras Lenguajes Operadores sobre

Más detalles

Práctica N o 4 - Programación Lógica

Práctica N o 4 - Programación Lógica Práctica N o 4 - Programación Lógica Para resolver esta práctica, recomendamos usar el SWI-Prolog, de distribución gratuita, que puede bajarse de http://www.swi-prolog.org. No utilizar cut (!) ni predicados

Más detalles

Se dice que una matriz cuadrada A es invertible, si existe una matriz B con la propiedad de que

Se dice que una matriz cuadrada A es invertible, si existe una matriz B con la propiedad de que MATRICES INVERTIBLES Se dice que una matriz cuadrada A es invertible, si existe una matriz B con la propiedad de que AB = BA = I siendo I la matriz identidad. Denominamos a la matriz B la inversa de A

Más detalles

Introducción a la Teoría de Códigos

Introducción a la Teoría de Códigos Introducción a la Teoría de Códigos M.A. García, L. Martínez, T. Ramírez Facultad de Ciencia y Tecnología. UPV/EHU Ejercicios y Problemas resueltos Tema 3: CÓDIGOS LINEALES Mayo de 2017 Ejercicios Resueltos:

Más detalles

Control en Prolog. Control

Control en Prolog. Control Control sobre La búsqueda El retroceso La unificación Aplicaciones. Control en Prolog Recorrido sobre grafos Sin repetir nodo Sin repetir arco Control La búsqueda mediante un predicado sin argumentos!

Más detalles

Estrategias de pivoteo

Estrategias de pivoteo Estrategias de pivoteo Objetivos. Resolver sistemas de ecuaciones lineales aplicando varias técnicas de pivoteo; programar estos algoritmos. Requisitos. Operaciones elementales, experiencia de resolver

Más detalles

Espacios vectoriales

Espacios vectoriales CAPíTULO 2 Espacios vectoriales 1. Definición de espacio vectorial Es frecuente representar ciertas magnitudes físicas (velocidad, fuerza,...) mediante segmentos orientados o vectores. Dados dos de tales

Más detalles

Estructura de datos y algoritmos. Tema V TDA DINÁMICOS NO LINEALES: Árboles: árboles binarios

Estructura de datos y algoritmos. Tema V TDA DINÁMICOS NO LINEALES: Árboles: árboles binarios Estructura de datos y algoritmos Tema V TDA DINÁMICOS NO LINEALES: Árboles: árboles binarios TEMA V : TIPOS DE DATOS ABSTRACTOS NO LINEALES: ÁRBOLES 5.1 Conceptos y definiciones 5.2 Árboles perfectamente

Más detalles

Máquinas de estado finito y expresiones regulares

Máquinas de estado finito y expresiones regulares Capítulo 3 Máquinas de estado finito y expresiones regulares En este tema definiremos y estudiaremos máquinas de estado finito, llamadas también máquinas de estado finito secuenciales o autómatas finitos.

Más detalles

Práctica N o 5 - Programación Lógica

Práctica N o 5 - Programación Lógica Práctica N o 5 - Programación Lógica Para resolver esta práctica, recomendamos usar el SWI-Prolog, de distribución gratuita, que puede bajarse de http://www.swi-prolog.org. No utilizar cut (!) ni predicados

Más detalles

Procedimiento para encontrar la inversa de una matriz cuadrada (Método de Gauss-Jordan).

Procedimiento para encontrar la inversa de una matriz cuadrada (Método de Gauss-Jordan). Ejemplo 19: Demuestre que la matriz A es invertible y escríbala como un producto de matrices elementales. Solución: Para resolver el problema, se reduce A a I y se registran las operaciones elementales

Más detalles

Álgebra y Matemática Discreta

Álgebra y Matemática Discreta Álgebra y Matemática Discreta Sesión de Teoría 1 (c) 2013 Leandro Marín, Francisco J. Vera, Gema M. Díaz 16 Sep 2013-22 Sep 2013 Los Números Enteros El Conjunto Z Vamos a empezar por la aritmética más

Más detalles

2.1 Generación y manejo de vectores y matrices.

2.1 Generación y manejo de vectores y matrices. 2.1 Generación y manejo de vectores y matrices. Generación de vectores de forma directa En el lenguaje M se va a trabajar habitualmente con los corchetes ([ ]) para la generación de vectores y matrices.

Más detalles

Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas

Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas Departamento de Informática Universidad de Valladolid Curso 2011-12 Grado en Ingeniería Informática Grado en Ingeniería Informática de

Más detalles

Si u y v son vectores cualquiera en W, entonces u + v esta en W. Si c es cualquier numero real y u es cualquier vector en W, entonces cu esta en W.

Si u y v son vectores cualquiera en W, entonces u + v esta en W. Si c es cualquier numero real y u es cualquier vector en W, entonces cu esta en W. Unidad 4 Espacios vectoriales reales 4.1 Subespacios Si V es un espacio vectorial y W un subconjunto no vacío de V. Entonces W es un subespacio de V si se cumplen las siguientes condiciones Si u y v son

Más detalles

Matrices 2º curso de Bachillerato Ciencias y tecnología

Matrices 2º curso de Bachillerato Ciencias y tecnología MATRICES Índice:. Introducción-------------------------------------------------------------------------------------- 2. Definición de matriz-----------------------------------------------------------------------------

Más detalles

Un elemento de un monoide se dice que es inversible si tiene elemento inverso.

Un elemento de un monoide se dice que es inversible si tiene elemento inverso. Tema 1: Semigrupos 1 Tema 1: Semigrupos 1. Semigrupos: Conceptos fundamentales. Recordemos que un sistema algebraico es un conjunto S con una o varias operaciones sobre él, siendo una operación ó ley de

Más detalles

GUÍA DE EJERCICIOS: MATEMÁTICAS

GUÍA DE EJERCICIOS: MATEMÁTICAS GUÍA DE EJERCICIOS: MATEMÁTICAS Matrices Esta guía de estudio está diseñada con ejercicios resueltos paso a paso con el fin de mostrar los procedimientos detallados para abordar cada uno de ellos. Las

Más detalles

Las matrices se denotarán usualmente por letras mayúsculas, A, B,..., y los elementos de las mismas por minúsculas, a, b,...

Las matrices se denotarán usualmente por letras mayúsculas, A, B,..., y los elementos de las mismas por minúsculas, a, b,... INTRO. MATRICES Y DETERMINANTES Prof. Gustavo Sosa Las matrices se utilizan en el cálculo numérico, en la resolución de sistemas de ecuaciones lineales, de las ecuaciones diferenciales y de las derivadas

Más detalles