Está en la página 1de 14

Capitulo 6. Modelado de datos en Prolog.

En trminos generales un programa de computadora (o ms amplia: un sistema de informacin) consiste de datos y procedimientos para manipular datos y una interfaz de usuario. En los captulos previos hemos puesto atencin a las bases de como Prolog manipula datos para buscar respuestas para el usuario. En este capitulo iremos a fondo en la manera de como esta estructurado un dato en un programa Prolog. Usted encontrar varias y elegantes formas para crear estructuras de datos. Nos concentraremos en como modelar un dato en Prolog, antes realizar acciones en l. Por lo tanto aqu no habr muchos ejemplos pertenecientes a la ejecucin de cdigo. Como en el captulo anterior vamos a continuar usando el entorno PIE (Motor de inferencia de Prolog) para desarrollar y aprender Prolog. Vamos a continuar Visual Prolog IDE en los siguientes captulos. 6.1 Dominios En el capitulo 5 todas las personas estaban representadas como Bill , John y Pam , etc. Para los seres humanos Bill , John y Pam son solo nombres de los individuos. Para un lenguaje de programacin como Prolog, Bill es una secuencia de letras (y quizs otros signos) delimitada por doble comillas. Como una secuencia es llamada una cadena. Una cadena es una forma para representar un valor. En este caso Bill es el valor que puede ser asignado a la variable Nombre . De tal manera que la representacin se denomina un tipo de dato. Hay diversos tipos de datos disponibles en Prolog. Por mencionar algunos: y y char: Este tipo permite valores que consiste de un carcter entre simples comillas. Ejemplos son a , b . string: Un cadena (string) consiste en una serie de caracteres entre dobles comillas. Ejemplos son Esta es una cadena larga y Esta es una cadena con @#$%&/() caracteres extraos . Integer: Un entero es un nmero integral. Cuando el smbolo es omitido, este es asumido para ser positivo. Unsigned: valores del tipo unsigned son nmeros enteros sin tipo. Real: Valores del tipo real son nmeros que contienen una parte decimal.

y y y

Un tipo de dato describe el valor que se puede producir. Podras pensar un tipo de datos como un conjunto de posibles valores. En Prolog a este conjunto de valores se les llama dominios. Los dominios mencionados aqu son llamados tipos de datos simples o dominios simples. En el caso de los nombres de las personas, el simple dominio es una cadena. Uno dominio ofrece un conjunto de valores para una variable. Los nmeros de dominios ofrecen un rango de valores numricos. Muchos de estos dominios pueden ser familiares para usted y le ofrecer valores tradicionales que espera de l. Dominios simples ofrecen valores que son usados para describir una caracterstica. Sin embargo, personas son representados por ms caractersticas que solo por sus nombres. Qu pasa si tenemos que representar todas las caractersticas juntas en vez de una sola? En este caso

tendramos que ver una forma para representar un conjunto de caractersticas. Es decir, necesitamos algn mecanismo para representar dominios compuestos; una coleccin de simples dominios unidos en un paquete. 6.2 Mejorando la Teora de la Familia. Si usted continua trabajando con la relacin familiar del capitulo 5, probablemente haya encontrado problemas con las relaciones como hermano y hermana porque es algo difcil de determinar el sexo de una persona (a menos que la persona sea padre o madre). El problema es que hemos elegido una mala manera de formalizar nuestra teora. La razn por la que llegamos a esta teora es porque empezamos por considerar las relaciones como el padre y los padres entre las entidades u objetos. Si en lugar de centrarnos primero en las entidades, entonces el resultado ser diferente. Nuestras principales entidades son personas. Las personas que tienen un nombre (en este simple contexto que todava asumimos que el nombre identifica a la persona, en un programa a escala real este podra no ser cierto). Las personas tambin tienen una perspectiva de gnero. Las personas tienen muchas otras propiedades, pero ninguno de ellos tiene algn inters en nuestro contexto. Por lo tanto definimos un predicado a la persona, como esto: y y y Persona ( Bill , masculino ). Persona ( John , masculino ). Persona ( Pam , femenino ).

El primer argumento del predicado de la persona es el nombre y el segundo es el gnero. Si usted busca ver un predicado como una relacin, debera pensar el predicado de la persona como una relacin entre un nombre y un gnero. O como una relacin dentro de una entidad en lugar de entre entidades. Un predicado como este es llamado un funtor. Ms acerca de funtores en la seccin 6.3. En lugar de usar madre y padre como hechos, yo podra escoger tener un padre como hecho y madre y padre como reglas: y y y y Padre ( Bill , John ). Padre ( Pam , Bill ). Padre (Persona, Padre): -padre (Persona, Padre), persona (Padre, masculino ). Madre (Persona, Madre): -padre (Persona, Madre), persona (Madre, femenino ).

Ntese que cuando padre es una relacin derivada como esta, es imposible establecer padres femeninos. As que esta teora tiene una consistencia incorporada en este punto, que no exista en la otra formulacin. Como ves, es posible formular una teora de varias formas. Esto puede parecer confuso (y hasta cierto punto lo es) sino que se asemeja al hecho de que ninguna teora puede ser formulada de

diferentes maneras, como puede tener relaciones entre personas. Esto le permite elegir la mejor forma. Pero tal vez deberamos advertir. Que como siempre en la ciencia (y la vida) rara vez hay una sola mejor manera. Hemos especificado el dato de cierta persona como una lista de argumentos. Sin embargo este es otro mtodo elegante para acentuar nuestro enfoque en las entidades siendo representadas. Podramos empaquetar ambos, el nombre y el gnero dentro de un paquete usando una formalizacin conocida como dominio compuesto. Piense en ello como un conjunto de valores que caracterizan a una persona. Esto tiene algunas ventajas como Prolog ofrece la posibilidad para representar el paquete entero usando una variable pero tambin se puede llegar a cada argumento, aparte de los otros. A modo de ejemplo en Prolog puede hacer la siguiente declaracin: y P = persona ( Bill , masculino ).

Entonces la variable P es obligado a (representar) el conjunto persona Bull. Pero tambin esta declaracin es posible: y Persona (Nombre, Genero) = persona ( Bill , masculino ).

En este caso la variable Nombre es obligado al valor Bill y la variable genero es obligado a masculino . Las ventajas de esto sern aclaradas en la siguiente seccin. 6.3 Dominios compuestos y funtores. Los hechos mencionados acerca de personas podran ser genricamente representadas en una declaracin para dominios compuestos as: y Persona = persona (string Nombre, string Gnero)

Esta declaracin dice que con la persona puede esperar dos argumentos ambos de tipo string una es el nombre y la otra es el Genero. Ntese que para el compilador el string es importante como un tipo de declaracin, las palabras Nombre y Gnero son para lectores humanos. Tambin ntese que ninguno de estos es un hecho ni un predicado. Un hecho contiene solo un valor, mientras esta persona contiene dos valores. Tampoco es un predicado, porque un predicado es usado para manipular datos, mientras en persona solo podemos almacenar datos de una persona. La declaracin afirma que hay un cierto dominio compuesto llamado persona en el sistema y que cada entidad de ese dominio tiene dos caractersticas, representadas por las variables lgicas Nombre y Gnero. Remarcando lo que hablamos acerca de valores desde un simple dominio y acerca de entidades de un dominio compuesto. Esto es porque una entidad de un dominio compuesta consiste en ms de un valor. Cada uno de estos valores viene de un dominio simple.

La palabra persona es conocida como un funtor, y las variables son argumentos. Ahora vamos a nuestro paquete de datos usando estos funtores. Como un dominio compuesto siempre tiene un funtor, en adelante usaremos el termino funtor en este capitulo, para representar el respectivo dominio compuesto. Por ahora, vamos a modificar el primer ejemplo del capitulo pruebo, para eso usaremos nuestro nuevo definido funtor persona . Ahora pensemos que una en una persona como un conjunto de dos valores. Eso quiere decir que debemos especificar Bill como: y Persona ( Bill , masculino ).

Y especificamos Pam como: y Persona ( Pam , femenino ).

Para indicar que Bill es el padre de Pam, ahora debemos escribir: y Padre (persona ( Pam , femenino ), persona ( Bill , masculino )).

El patrn es el mismo que cuando escribimos: y Padre (persona ( Pam , Bill ).

En el capitulo 5, la nica diferencia es que ahora los argumentos son de un dominio compuesto. El programa familia se convierte en: Padre (persona ( Bill , masculino ), persona ( John , masculino )). Padre (persona ( Pam , femenino ), persona ( Bill , masculino )). Padre (persona ( Sue , femenino ), persona ( Jim , masculino )). Abuelo (Persona, Abuelo) :Padre (Padre, Abuelo), Padre(Persona, Padre). Inserte esas lneas en el editor de programas de PIE, el resultado se vera como en la figura 6.1

Por favor note que en el PIE (Motor de Inferencia Prolog) que estamos usando, podemos usar directamente un dominio compuesto sin ninguna intimacin previa al motor Prolog (por ejemplo, NO necesitamos declarar un predicado o un hecho llamado persona para trabajar nuestro cdigo). Es un hecho que puede declarar un dominio compuesto en PIE solo usando simplemente esto en sus predicados. Este es diferente de Visual Prolog donde tiene que declarar lo que se va a usar. Regresaremos a esto en el capitulo 9. Si estudia los hechos de la relacin padre, habr notado que las personas descritas son ms ricas que antes. Esta vez, la persona es descrita con ambos nombres de la persona y su genero, usando el funtor persona, como en el capitulo 5 (Fundamentos de Prolog Parte 1) donde solo usamos el nombre de la persona. Despus de haber escrito el cdigo nuevo, provoca que el motor PIE se reinicie, use Engine/Reset. Entonces, reconsulte el cdigo usando Engine/Reconsult. Despus, en una lnea en blanco en la ventana de dialogo escribe una meta (sin el smbolo ? enfrente). Por ejemplo escriba la meta: y Abuelo (X,Y).

Y presione <Enter>. El motor de inferencia contesta. X = persona (Pam, femenino), Y = persona(Bill, masculino). 1 solucin Como se muestra en la figura 6.2

Ntese que en este caso la variable X contiene todo lo que sabemos acerca de la persona Pam, su nombre y su gnero. Esto tambin es posible para enfocar el nombre y genero separadamente. Entre en el Dialog lo siguiente:

Abuelo(persona(NombreNio, GeneroNio), persona(NombreAbuelo, GeneroAbuelo)). Tenga cuidado de las letras maysculas y los puntos y presione <Enter> . El motor de inferencia responde: NOMBRENIO = Pam, GENERONIO = femenino, NOMBREABUELO = John, GENEROABUELO = masculino 1 solucin Esto le da una respuesta detallada. Ms acerca de esto en la siguiente seccin. 6.4 Usando funtores. Si le echa un vistazo al predicado abuelo, se dar cuenta de que tiene un error sutil: Una persona normalmente tiene dos abuelos, uno de parte del lado de la madre y otro de parte del lado del padre, pero el predicado abuelo definido anteriormente solo tiene el campo abuelo en el lado del padre. El predicado abuelo puede ser rescrito de la siguiente manera: Abuelo (Persona, ElAbuelo):Padre (Persona, PadredePersona), Padre (PadredePersona, ElAbuelo). En este predicado el estado lgico es un padre de un padre que podra ser el abuelo de la persona en consideracin. Para que este predicado funcione, necesitamos definir un predicado llamado padre usando el funtor persona. Este predicado podra troll a travs de una base de datos que explican los padres definidos en el sistema. Este es un mtodo elegante ms para buscar a los padres, en lugar de presentarlos como hechos (como se vio anteriormente) porque despus podremos ampliar este concepto para averiguar las madres de una manera similar. Esto puede hacerse de la siguiente manera: /*1ra versin*/ Vamos a asumir que la variable Persona esta ligada a un Nombre y a un Genero y esto ahora le llamaremos el predicado. Padre(Persona, Padre):Padre(Persona, Padre), %Lnea 1 Padre = persona(_, masculino ). %Lnea 2 Para ver si es un padre. Este predicado es llamado con Persona ligado a un valor especfico y esto regresa el Nombre del padre. Lo que sucede es que cuando el predicado Padre(Persona, Padre) es llamada, el motor de inferencia en la lnea 1 se ve en la base de datos para encontrar al padre de la clausula coincida con el nombre y el genero ligado a Persona y luego se une al Padre en el segundo argumento. Ntese que en este caso Padre esta ligado a toda la persona. En la lnea 2

el motor checa si el segundo argumento del nuevamente ligado Padre es igual a masculino . Si es esto, el predicado tiene xito y un nuevo padre es encontrado. En esta versin, el cdigo en Prolog examina sistemticamente cada hecho de los padres insertados en el cdigo y ve si la primera variable lgica (Persona) coincide con el pasado de la cabeza del predicado. Si la variable no coincide, se comprueba si el segundo argumento consiste en un funtor Persona, cuyo segundo argumento es la cadena literal masculino . Este ejemplo muestra una caracterstica importante de los funtores: Los argumentos de un funtor pueden ser desmontados y examinados usando variables regulares de Prolog y valores enlazados (como la cadena literal en este ejemplo). Si usted ve la lnea 2, se dar cuenta de que hemos utilizado un subrayado. En Prologo esto es una variable annima, esto indica que hay un valor en ese lugar, pero que no estamos interesados en l. Aqu utilizamos la variable annima para el primer argumento del funtor persona como nosotros (en este predicado) no estamos interesados en el nombre del padre. Solo buscamos saber si es un padre. Ntese tambin el uso del signo % . Esto es un indicador de que el resto de la lnea es un comentario y debera ser omitido por el motor de inferencia. La otra forma es esta: /*2da versin*/ Padre(Persona, persona(nombre, masculino )):Padre(Persona, persona (nombre, masculino )). Este predicado se denomina tambin con quien est ligado a una variable y devuelve el nombre del padre. La lgica detrs de las dos versiones es la misma, pero la manera en que se indica la lgica para el motor de Prolog es diferente. En esta segunda versin, el conjunto de hechos de los padres tambin se examina. Al llegar al valor correcto para la persona, el cdigo se detiene y devuelve los datos correctos del funtor a la cabeza del predicado, siempre y cuando el segundo argumento del funtor sea una cadena literal masculina . Si observa, el funtor no tiene un enlace a alguna variable intermedia de Prolog como se hizo en la primera versin. La segunda versin es mucho ms concisa que la primera, y, a veces este mtodo de escribir el cdigo puede ser menos legible para los principiantes. As que no dude en utilizar la primera versin como este correcto cdigo de Prolog. Ahora vamos a utilizar est cdigo en un ejemplo completo, donde daremos un adecuado conjunto de hechos de persona. Por favor inserte en el programa editor de PIE las siguientes clausulas: Padre(persona( Bill , masculino ), persona( John , masculino )). Padre(persona( Pam , femenino ), persona( Bill , masculino )). Padre(persona( Pam , femenino ), persona( Jane , femenino )). Padre( persona( Jane , femenino ), persona( Joe , masculino )).

Abuelo(Persona, Abuelo):Padre(Padre, Padre de Persona), Padre(PadredePersona, Abuelo). Padre(Persona, persona(Nombre, masculino )):Padre(Persona, persona(Nombre, masculino )). El resultado debe verse como en la figura 6.3:

Ahora, despus de reiniciar el motor de inferencia y reconsultar el cdigo anterior dentro del PIE y dar el siguiente objetivo: Abuelo(persona( Pam , femenino ),W) El resultado podra ser: Abuelo(persona( Pam , femenino )W) W = persona (John, masculino) W = persona(Joe, masculino) 2 soluciones Tenemos los nombres de los abuelos. Sintase libre de perder el tiempo con este programa, aadiendo algunas clusulas ms y solicitando diferentes objetivos. Usted tiene que estar bien familiarizado tanto como con los funtores como con el uso de las palabras funcionales, en Prolog es importante.

6.5 Funtores y predicados. Los funtores y predicados se parecen, pero son muy diferentes, Tcnicamente, un funtor representa una funcin lgica que une a varios dominios juntos. En palabras simples, un funtor es un mecanismo que ensea al motor de Prolog cmo juntar los datos de sus componentes. Que efectivamente pone partes de los datos en una caja comn. Es por eso que he dicho que un funtor es para almacenar y recuperar valores de datos. Tambin se pueden recuperar posteriormente las partes, siempre que sea necesario (como se ve en los ejemplos anteriores). Puede parecer un hecho Prolog o una llamada predicado, pero no es. Es slo un pedazo de datos, que usted puede manejar de la misma forma como una cadena o un nmero. Tenga en cuenta que un funtor no tiene nada que ver con una funcin en otros lenguajes de programacin. Que no representa un clculo a realizar. Simplemente identifica el dominio compuesto y tiene un conjunto de argumentos. Cuando se conoce el lenguaje de programacin Pascal, entonces usted puede comparar un dominio compuesto para el registro de tipo de Pascal. Cuando estudie el ejemplo anterior, se dar cuenta de que no necesita nada especial que hacer cuando las variables lgicas se utilizan para sustituir a los datos representados por funtores. La variable lgica que se utiliza para sustituir a estos datos representados por funtores, se escribe como cualquier otra variable lgica, una palabra que comienza con una letra mayscula. As, si echamos un vistazo en el predicado abuelo del ejemplo de este tutorial, se ve que nada ha cambiado cuando se comprara con el mismo predicado que se defini en el capitulo 5. Despus de todo, la lgica de predicados no ha cambiado. Por lo tanto, usted no encontrar ningn cambio en las variables utilizadas dentro de ese predicado. La mayor ventaja de utilizar un funtor es que usted es libre de cambiar los argumentos internos del funtor sin cambiar gran parte de los predicados que se usan como un funtor y cuando mantenga la revisin del cdigo. Esto significa que si usted decide (en una versin posterior del cdigo que est escrito) tener un argumento ms para el funtor persona, usted no necesita cambiar nada en el predicado abuelo. Es decir, siempre y cuando se enlaza el funtor en su conjunto . Si desea recuperar un valor especifico dentro del funtor, entonces usted podra estar obligado a cambiar el cdigo de llamada. 6.6 Funtores como argumentos. En la seccin anterior, el funtor persona tenia dos argumentos: el Nombre y el Gnero. Ambos pasaron a ser dominios simples, en este caso del dominio cadena . Los valores utilizados, como Bill y masculino son, en general, llamadas constantes ya que no cambian en el transcurso del programa. Sin embargo, no hay nada que nos impida poner un mismo funtor como un argumento de otro funtor. Supongamos, que quiera definir un funtor para una pareja (es decir, un esposo y una esposa). He aqu el ejemplo de como se usara como un funtor: Una pareja se compone de un masculino y un

femenino, por lo menos vamos a suponer que. Por lo que una pareja es un tipo de paquete de un masculino y un femenino y sus nombres. Una clusula de la pareja funtor podra ser: Pareja(persona( John , masculino ), ( Anna , femenina )) En su cdigo de programa que podra ser un predicado miPredicado() que podra hacer algo con un par: MiPredicado(UnaPareja):UnaPareja=pareja(persona(Esposo, masculino ), persona(Esposa, femenino )), En este ejemplo, podr observar que el funtor pareja est definido usando dos funtores, ambos del dominio compuesto persona , cada uno de ellos es una mezcla de variables y constantes. Esto se puede hacer para reflejar la lgica de los datos a representar. La lgica usada aqu es que el marido es siempre masculino y la mujer es siempre femenina y una pareja se compone de un esposo y una esposa. Todo lo cual es consistente con una interpretacin comn de lo que se entiende por una pareja. Pero por supuesto que se describe slo una parte de la realidad fascinante que nos rodea. Aunque en el PIE no se puede definir el tipo de gramtica de los funtores que puede tener, en Visual Prolog se pueden hacer tales definiciones. La ventaja de definir un funtor de tal manera que despus, cuando se crea utilizando datos reales de este funtor, el motor de Prolog siempre comprueba que los datos que se crean son consistentes con los datos de la gramtica que se supona que deba cumplir. Esto viene a ser otra caracterstica de funtores: el funtor de pareja se ha definido con dos argumentos y la posicin de estos argumentos reflejan su asociacin lgica. Se explic en el capitulo 5 que las posiciones de los argumentos de los predicados tienen que ser formalizado por el programador, que disea el cdigo. Una vez formalizada, la formalizacin de posicin misma debe ser utilizada constantemente. La misma estrategia se aplica ala creacin de funtores: En el caso del funtor pareja, dio la casualidad de que hemos decidido representar al esposo como el primer argumento, y a la esposa como el segundo. Una vez hecho esto, entonces cada vez que los datos se crean mediante un funtor, entonces tenemos que asegurarnos de que el esposo es siempre en la primera posicin, y la esposa en la segunda. Ahora, cuando miramos hacia atrs en el funtor pareja, bien podra decirse que si estamos tan convencidos de que el primer argumento es siempre un esposo (que es siempre un hombre) y el segundo es siempre una esposa (que es siempre una mujer), entonces Cul es la necesidad de usar las cadenas masculino y femenino en la toma de la llamada predicado? Si est seguro de que el primer argumento es siempre el marido y el segundo es siempre una mujer, entonces la llamada se podra simplificar a: MiPredicado(UnaPareja):UnaPareja = pareja(Esposo, Esposa),...

Pero, cuando usted no est seguro de cual de los dos est en la primera posicin, entonces usted probablemente querr asegurarse de quin es quin. He aqu una versin de la llamada que las captura: MiPredicado(pareja):Pareja=pareja(persona(NombrePersona,GeneroPersona), persona(NombreEsposa,GeneroEsposa)), En el funtor anterior, ambos siguen los ejemplos con sentido lgico miPredicado(C1) C1=pareja(persona( Bill , masculino ), persona( Pam , femenino )), O miPredicado(C2) C2=pareja(persona( Pam , femenino), persona ( Bill , masculino )), En las llamadas se unen el gnero de la persona a GeneroPersona y el gnero de la esposa a GeneroEsposa. En el resto de miPredicado usted tendr que averiguar quien es quin. Cabe sealar que en el PIE (y muchos otros motores de Prolog), no hay manera de indicar si un funtor recibir argumentos para un dominio simple o un dominio compuesto, al observar las variables que definen el funtor. Esto se deriva del hecho de que en el PIE, los dominios compuestos se utilizan directamente sin ser declarados en cualquier lugar, excepto en la mente del programador. Por ejemplo, si usted busca usar un dominio compuesto como: Persona(Nombre, Gnero) Entonces PIE aceptara fcilmente una variable lgica, tales como: RespectoAUnaPersona(Alguien):Alguien=persona( Pam , Persona( Pam , Persona( Pam , Persona( Pam , femenino ) ) ) ) ), . Que en realidad no tiene ningn sentido lgico, en el contexto actual. Afortunadamente, Visual Prolog, hace un trabajo mucho mejor de la diferenciacin entre los dominios simples y los dominios compuestos, por lo que, cuando llegue a los siguientes captulos no tendr ningn tipo de problemas.

6.7 Recursin usando funtores. Cuando los datos son descritos usando funtores, estos son tratados como otra pieza ms de datos. Por ejemplo, usted puede escribir un predicado que se puede hacer para buscar de forma recursiva a travs de datos que utilizan dominios compuestos usando funtores. Volvamos brevemente al predicado anterior, que hemos utilizado en el capitulo 5. Con el fin de determinar si alguien es un antepasado de alguien ms, se utiliz una definicin recursiva para el predicado, es decir, una definicin que se define en trminos de si mismo, de esta manera: Ancestro (Persona, Ancestro):- padre(Persona, Ancestro). Ancestro (Persona, Ancestro): - padre (Persona, P1), ancestros (P1, Ancestro). Esta declaracin afirma que uno de los padres es uno antepasado, y que un antepasado de uno de los padres es tambin un antepasado. Si usted examina las variables persona y ancestros en la definicin anterior, puede que quede muy bien parado, ya sean dominios simples o dominios compuestos. Vamos a definir los datos as: Padre (persona( Bill , masculino ), persona( John , masculino )). Padre (persona( Pam , femenino ), persona( Bill , masculino )). Si nos preguntamos usando PIE para resolver el siguiente objetivo: P=persona( Pam , femenino ), ancestro(P, Quien). Esto es lo que saldr: P = persona (Pam, femenino), QUIEN = persona(Bill, masculino) P = persona (Pam, femenino), QUIEN = persona(John, masculino) El motor de PIE ha examinado recursivamente los hechos de los padres para revelar las dos posibles soluciones a la respuesta. Por cierto, en la consulta anterior tambin se ve que han consolidado una variable P en el dominio compuesto persona cuando se especifica el objetivo de PIE. Esto se hizo para hacer que el cdigo sea ms legible, sino que tambin demuestra una vez ms le hecho de que se puede unir un pedazo de datos especificados como un dominio compuesto en cualquier variable Prolog. 6.8 Estrategias para usar funtores. El software podra ser tan bueno como lo permite el modelado de datos. Por el trmino modelado, nos referimos a la creacin de una relacin entre el subconjunto de las afueras del mundo real que se est abordando con los datos de las estructuras internas del software . Si el modelado de datos es pobre, entonces es probable que el software tambin ser pobre, o en el pero de los casos

ineficiente. Esto es cierto para cualquier software escrito en cualquier lenguaje de programacin. Esta fue la razn por la que en la ultima parte del capitulo anterior habamos tratado de centrarnos en las entidades y tratar de corregir la situacin mediante la insercin de hechos ms ricos. Del mismo modo, hemos introducido el concepto de funtores en este capitulo para obtener ms claridad en los datos respecto a las entidades que se est modelando. La ventaja de Prolog, es que permite la descripcin sencilla de los datos del mundo real en una forma que puede ser utilizado internamente por el cdigo de una manera eficiente. Al mismo tiempo, tambin hace que el cdigo sea de fcil lectura para los compaeros programadores que estn trabajando juntos en un proyecto. Los funtores se pueden utilizar para crear cualquier tipo de dominio compuesto para ayudar en el proceso de modelado. Usted tendra que examinar cuidadosamente las diversas partes de datos del mundo real que va a procesar y convertir usando palabras funcionales (y otros tipos de datos que encontrar en los otros captulos), teniendo en cuenta su uso en todas las partes crticas del software. Algunas estructuras de datos que fueron tiles en un rea del software pueden llegar a ser un obstculo en otras reas. Usted debe tomar un enfoque holstico, mientras que la reduccin a cero en los funtores (y otras estructuras de datos) va a utilizar en el software. Haga una pausa y mire a su alrededor y en todas las esquinas de su software. Solo entonces si su cdigo tiene los funtores necesarios. Solo pensar cuidadosamente acerca de las estructuras de datos no es lo nico que se requiere. Tambin tendra que (a menudo de manera simultanea) escribir/modificar los diversos objetivos y subjetivos (es decir, predicados) y luego utilizar los datos desarrollados hasta ahora en los predicados. Los efectos secundarios de alcanzar los objetivos y sub-metas pueden hacer trabajar su software y usted podra obtener valiosa informacin con la que puede ajustar aun ms las estructuras de datos. En este capitulo no debemos de concentrarnos en un diseo de software de manera integral, tenemos que obtener pedazos y piezas de datos que establecen el sentimiento para algn tipo de dato concerniente al mundo real relacionada entre personas (padres, abuelos, familias, ancestros, etc.). En los ltimos captulos posteriores profundizaremos estos temas, eventualmente terminando con software til que requiere de estructuras de datos. 6.9 Conclusin En este capitulo nos enteramos de que los datos pueden formar parte de un modelo interactivo o pueden ser dominios compuestos representados con funtores. Se encontr que los argumentos de los funtores deben ser posicionalmente coherentes con la lgica que se quiere representar. Entendimos que un funtor no necesita tener dominios simples como argumentos, pero tambin puede tener otros funtores como argumentos. Mas tarde supimos que los datos representados como funtores se pueden utilizar como cualquier otra variable Prolog regular, e incluso podemos realizar todas las operaciones, incluyendo la repeticin en esos datos.

Tambin hemos aprendido que debemos pasar tiempo modelando nuestro subconjunto del mundo real para el cual estamos desarrollando el software, y tener una idea de los datos. Simultneamente, debe experimentar con los predicados que podemos desear para uso con los datos que se est modelando, por lo que se puede refinar an ms.

También podría gustarte