SlideShare una empresa de Scribd logo
Prolog  :  Tipos de Datos Logica y Analisis de Algoritmos Francisco Lambert 2010-1
Tipos de Datos Como vimos la clase anterior, sabemos que los datos que maneja Prolog son conocidos como términos. Sin embargo, podemos construir otros tipos de datos a partir de estos. De hecho, algunos de estos tipos de datos estan predefinidos , como son el caso de las listas y las cadenas de caracteres. En cualquier caso, el lector debe asumir que Prolog no es un lenguaje tipado, puesto que no existen declaraciones explícitas de tipo tal y como ocurre en los lenguajes imperativos. El hecho de que no existan dichas declaraciones se debe sencillamente a que  no hacen falta  debido a que Prolog es un Lenguaje declarativo .
Registros Los registros son agrupaciones ordenadas de datos que en Prolog podemos escribir como términos que almacenan cada dato en un argumento. Por ejemplo, supongamos que queremos un registro para representar los datos personales de la gente: persona('Eva','Fina','Y Segura',15) persona('Fulanito','De Tal','Y Tal',32) Mediante el término persona/4 representamos a un individuo. El primer argumento es el nombre, el segundo y tercero son los apellidos y el cuarto es la edad. Puesto que los términos son anidables podemos crear registros complejos: persona('Menganito',edad(32),direccion('Leganitos',13,'Madrid'))
Arboles Puesto que los términos pueden ser recursivos es fácil crear estructuras de datos recurrentes. Como ejemplo, veamos como definir  árboles binarios . Para ello representamos el árbol vacío mediante una constante, por ejemplo, empty/0, y un nodo cualquiera puede ser representado mediante el término tree/3. El primer argumento representa un dato cualquiera asociado al nodo. El segundo argumento representa la rama izquierda, y el tercer argumento la correspondiente rama derecha. Son ejemplos de árboles: empty tree(dato1,empty,empty) tree(dato1,tree(dato2,empty,empty),tree(dato3,empty,empty)) tree(dato4,empty,tree(dato5,tree(dato6,empty,empty),empty))
Listas Las listas en Prolog podrian definirse del mismo modo que los árboles puesto que los términos se pueden anidar todas las veces que sea necesario. Por ejemplo, la lista de números del uno al cinco se puede representar así: lista(1,lista(2,lista(3,lista(4,lista(5,vacio))))) Afortunadamente, las listas están predefinidas en el lenguaje para una mayor comodidad. De modo que la lista anterior la podemos escribir así: [1, 2, 3, 4, 5]
Listas Esta es la forma de escribir las listas definiendo todos los elementos, pero podemos manipular las listas distinguiendo cabeza y resto: [C|R]. Donde la variable C representa la cabeza, y R el resto. Por ejemplo: L = [1, 2, 3, 4, 5], M = [0|L]. La lista M sería equivalente a [0,1,2,3,4,5] .  Es importante no confundir los términos  [C|R] y [C,R]. La diferencia es muy sutil: L = [1, 2, 3, 4, 5], M = [0,L]. El resultado sería M = [0,[1,2,3,4,5]], que es una lista de dos elementos.
Listas Naturalmente, existe la lista vacía, que se representa como []. Además resulta conveniente tener en cuenta que: Existen bibliotecas para hacer cosas más complicadas con las listas, como concatenar, aplanar, etc. Los elementos de las listas son términos y pueden ser heterogéneos.  Por ejemplo:  [1,p(a),[a,b],f(g(h))]. Las listas también son términos, solamente las escribimos de una manera más cómoda. Así, la lista [1,a,2] es en realidad el término  '.'(1,'.'(a,'.'(2,[]))).
Cadenas de Caracteres Las cadenas de caracteres son en Prolog listas de códigos ASCII. Afortunadamente se pueden escribir de una manera cómoda poniendo los caracteres entre comillas dobles. Por ejemplo, la expresión "ABC" es en realidad la lista [65,66,67]. Así, podemos tratar las cadenas de caracteres como cadenas o como listas según nos interese. Naturalmente, todo el código que nos sirve para listas nos sirve para cadenas. Por ejemplo, el predicado que concatena dos listas támbien sirve para concatenar dos cadenas de texto.
Constantes Como ya es sabido, las constantes en Prolog son términos cero-arios (átomos). A pesar de su simpleza, pueden ser muy útiles para representar información ya que pueden contener cualquier caracter. Se utilizan, por ejemplo, para representar nombres de ficheros. Recuerde que las constantes numéricas también son términos cero-arios (pero no son átomos).
Conversion entre Numeros Atomos y Cadenas de Caracteres Existe cierta correspondencia entre estos elementos. Tanto los números como los átomos se pueden convertir a cadena de caracteres mediante los predicados number_codes/2 y atom_codes/2  respectivamente. Utilizando las cadenas de caracteres como elemento intermedio, es posible convertir de átomos a números y viceversa:  atom_codes(Atomo,Aux),number_codes(Numero,Aux). Observe que dichos predicados son reversibles.
Tarea En Clases Pedro Gomez tiene alzheimer .La Familia de Pedro Gomez es numerosa . No recuerda cuantos hijos tiene pero sabe que almenos 4 son  hombres y 2 son mujeres mujeres .Recuerda que Salvo David , el hijo Homosexual , todo el resto de sus hijos son heterosexuales y de nombre unico , y como Pedro tiene muchos conocidos y contactos ha logrado casar a todos sus hijos y todas sus hijas heterosexuales . A su vez, Pedro reconoce a sus nietos, sabe sus nombres(que tambien son unicos, al no tener nadie el mismo nombre que un primo, tio o abuelo ) pero no puede recordar QUIEN es el padre y  la madre de cada uno de ellos . En la ultima Junta de Familia , evento del cual Pedro posee una foto, se cuentan 50 personas , donde claramente se diferencia al señor Pedro Gomez y la señora Matilda Perez en el centro de la foto , el resto, son miembros de la familia. Modelar, basado en las reglas ya descritas El Arbol Genealogico de la Familia GOMEZ PEREZ desde los cabecilla (Pedro y Matilda) hasta los nietos . Utilice la fotografia para poder deducir informacion nesesaria. Cualquier caso que asuma debe especificarlo en el archivo fuente o sera no validado y sancionado en la nota. Debe ser capaz de responder cualquier consulta implicita en el texto mas los requerimientos del cliente, que son : Listar el nombre de hijos del señor Pedro y la Señora Matilda. Sabiendo el nombre del Nieto, obtener el nombre de su Padre y Madre. Sabiendo el nombre del Hijo de Pedro, obtener nombres de sus hijos e hijas .

Más contenido relacionado

PPTX
Unida 2 busqueda
PPTX
2013_1_ciMedio_Tema6BusquedaAvanzada
DOCX
Búsqueda avanzada de información en internet
PPTX
PPTX
Prescentacion slideshare
PPTX
Sistema ms dos
PPTX
Organización aleatoria o indirecta1
Unida 2 busqueda
2013_1_ciMedio_Tema6BusquedaAvanzada
Búsqueda avanzada de información en internet
Prescentacion slideshare
Sistema ms dos
Organización aleatoria o indirecta1

La actualidad más candente (12)

PPTX
Organización aleatoria o indirecta
DOCX
Búsqueda avanzada de información en internet
PPTX
Resumen de bases de datos
PPTX
Estadística con Lenguaje R: Sesión 4
PPTX
2014_1_ciAvanzTema6_1TrobesAvanzBusquedaAvanz
DOCX
Búsqueda avanzada de información de internet By:Carla y Camila
PPSX
Evaluación del modulo 1
DOC
PPT
As3 unidad 10 trabajando con xml
PDF
Datos En La Web - Clase 1
PPTX
PERMISOS EN UBUNTU
Organización aleatoria o indirecta
Búsqueda avanzada de información en internet
Resumen de bases de datos
Estadística con Lenguaje R: Sesión 4
2014_1_ciAvanzTema6_1TrobesAvanzBusquedaAvanz
Búsqueda avanzada de información de internet By:Carla y Camila
Evaluación del modulo 1
As3 unidad 10 trabajando con xml
Datos En La Web - Clase 1
PERMISOS EN UBUNTU
Publicidad

Similar a Jflambert lyada - ayudantia 2 prolog (15)

PPTX
Conozcamos a Prolog
PDF
Archivos de Registros
PPTX
Estructuras de datos
PPT
Clase II Estructura de Datos. IUTE- Merida
PDF
Apuntes de XML
PPTX
Bases de datos 8°
PDF
Diplomado de computación conceptos previos
PPT
Vb II, Unidad 2, Manejo De Archivos
PPTX
Arreglos de registros
PPSX
Estructuras lineales y no lineales
PPTX
Tipos de Datos de Oracle
PPTX
Tablas y tipos de datos
DOCX
Omar unidad 07 base de datos
PDF
Portafolio Lenguajes y Autómatas Unidad 1
Conozcamos a Prolog
Archivos de Registros
Estructuras de datos
Clase II Estructura de Datos. IUTE- Merida
Apuntes de XML
Bases de datos 8°
Diplomado de computación conceptos previos
Vb II, Unidad 2, Manejo De Archivos
Arreglos de registros
Estructuras lineales y no lineales
Tipos de Datos de Oracle
Tablas y tipos de datos
Omar unidad 07 base de datos
Portafolio Lenguajes y Autómatas Unidad 1
Publicidad

Jflambert lyada - ayudantia 2 prolog

  • 1. Prolog : Tipos de Datos Logica y Analisis de Algoritmos Francisco Lambert 2010-1
  • 2. Tipos de Datos Como vimos la clase anterior, sabemos que los datos que maneja Prolog son conocidos como términos. Sin embargo, podemos construir otros tipos de datos a partir de estos. De hecho, algunos de estos tipos de datos estan predefinidos , como son el caso de las listas y las cadenas de caracteres. En cualquier caso, el lector debe asumir que Prolog no es un lenguaje tipado, puesto que no existen declaraciones explícitas de tipo tal y como ocurre en los lenguajes imperativos. El hecho de que no existan dichas declaraciones se debe sencillamente a que no hacen falta debido a que Prolog es un Lenguaje declarativo .
  • 3. Registros Los registros son agrupaciones ordenadas de datos que en Prolog podemos escribir como términos que almacenan cada dato en un argumento. Por ejemplo, supongamos que queremos un registro para representar los datos personales de la gente: persona('Eva','Fina','Y Segura',15) persona('Fulanito','De Tal','Y Tal',32) Mediante el término persona/4 representamos a un individuo. El primer argumento es el nombre, el segundo y tercero son los apellidos y el cuarto es la edad. Puesto que los términos son anidables podemos crear registros complejos: persona('Menganito',edad(32),direccion('Leganitos',13,'Madrid'))
  • 4. Arboles Puesto que los términos pueden ser recursivos es fácil crear estructuras de datos recurrentes. Como ejemplo, veamos como definir árboles binarios . Para ello representamos el árbol vacío mediante una constante, por ejemplo, empty/0, y un nodo cualquiera puede ser representado mediante el término tree/3. El primer argumento representa un dato cualquiera asociado al nodo. El segundo argumento representa la rama izquierda, y el tercer argumento la correspondiente rama derecha. Son ejemplos de árboles: empty tree(dato1,empty,empty) tree(dato1,tree(dato2,empty,empty),tree(dato3,empty,empty)) tree(dato4,empty,tree(dato5,tree(dato6,empty,empty),empty))
  • 5. Listas Las listas en Prolog podrian definirse del mismo modo que los árboles puesto que los términos se pueden anidar todas las veces que sea necesario. Por ejemplo, la lista de números del uno al cinco se puede representar así: lista(1,lista(2,lista(3,lista(4,lista(5,vacio))))) Afortunadamente, las listas están predefinidas en el lenguaje para una mayor comodidad. De modo que la lista anterior la podemos escribir así: [1, 2, 3, 4, 5]
  • 6. Listas Esta es la forma de escribir las listas definiendo todos los elementos, pero podemos manipular las listas distinguiendo cabeza y resto: [C|R]. Donde la variable C representa la cabeza, y R el resto. Por ejemplo: L = [1, 2, 3, 4, 5], M = [0|L]. La lista M sería equivalente a [0,1,2,3,4,5] . Es importante no confundir los términos [C|R] y [C,R]. La diferencia es muy sutil: L = [1, 2, 3, 4, 5], M = [0,L]. El resultado sería M = [0,[1,2,3,4,5]], que es una lista de dos elementos.
  • 7. Listas Naturalmente, existe la lista vacía, que se representa como []. Además resulta conveniente tener en cuenta que: Existen bibliotecas para hacer cosas más complicadas con las listas, como concatenar, aplanar, etc. Los elementos de las listas son términos y pueden ser heterogéneos. Por ejemplo: [1,p(a),[a,b],f(g(h))]. Las listas también son términos, solamente las escribimos de una manera más cómoda. Así, la lista [1,a,2] es en realidad el término '.'(1,'.'(a,'.'(2,[]))).
  • 8. Cadenas de Caracteres Las cadenas de caracteres son en Prolog listas de códigos ASCII. Afortunadamente se pueden escribir de una manera cómoda poniendo los caracteres entre comillas dobles. Por ejemplo, la expresión "ABC" es en realidad la lista [65,66,67]. Así, podemos tratar las cadenas de caracteres como cadenas o como listas según nos interese. Naturalmente, todo el código que nos sirve para listas nos sirve para cadenas. Por ejemplo, el predicado que concatena dos listas támbien sirve para concatenar dos cadenas de texto.
  • 9. Constantes Como ya es sabido, las constantes en Prolog son términos cero-arios (átomos). A pesar de su simpleza, pueden ser muy útiles para representar información ya que pueden contener cualquier caracter. Se utilizan, por ejemplo, para representar nombres de ficheros. Recuerde que las constantes numéricas también son términos cero-arios (pero no son átomos).
  • 10. Conversion entre Numeros Atomos y Cadenas de Caracteres Existe cierta correspondencia entre estos elementos. Tanto los números como los átomos se pueden convertir a cadena de caracteres mediante los predicados number_codes/2 y atom_codes/2 respectivamente. Utilizando las cadenas de caracteres como elemento intermedio, es posible convertir de átomos a números y viceversa: atom_codes(Atomo,Aux),number_codes(Numero,Aux). Observe que dichos predicados son reversibles.
  • 11. Tarea En Clases Pedro Gomez tiene alzheimer .La Familia de Pedro Gomez es numerosa . No recuerda cuantos hijos tiene pero sabe que almenos 4 son hombres y 2 son mujeres mujeres .Recuerda que Salvo David , el hijo Homosexual , todo el resto de sus hijos son heterosexuales y de nombre unico , y como Pedro tiene muchos conocidos y contactos ha logrado casar a todos sus hijos y todas sus hijas heterosexuales . A su vez, Pedro reconoce a sus nietos, sabe sus nombres(que tambien son unicos, al no tener nadie el mismo nombre que un primo, tio o abuelo ) pero no puede recordar QUIEN es el padre y la madre de cada uno de ellos . En la ultima Junta de Familia , evento del cual Pedro posee una foto, se cuentan 50 personas , donde claramente se diferencia al señor Pedro Gomez y la señora Matilda Perez en el centro de la foto , el resto, son miembros de la familia. Modelar, basado en las reglas ya descritas El Arbol Genealogico de la Familia GOMEZ PEREZ desde los cabecilla (Pedro y Matilda) hasta los nietos . Utilice la fotografia para poder deducir informacion nesesaria. Cualquier caso que asuma debe especificarlo en el archivo fuente o sera no validado y sancionado en la nota. Debe ser capaz de responder cualquier consulta implicita en el texto mas los requerimientos del cliente, que son : Listar el nombre de hijos del señor Pedro y la Señora Matilda. Sabiendo el nombre del Nieto, obtener el nombre de su Padre y Madre. Sabiendo el nombre del Hijo de Pedro, obtener nombres de sus hijos e hijas .