practicas y consejos.docx

34
MANUAL DE INGENIERÍA EN SISTEMAS COMPUTACIONALES PLAN ISIC-2004-296 PROGRAMACIÓN LÓGICA Y FUNCIONAL SCC-1019

Upload: nayeli

Post on 20-Jan-2016

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Practicas y consejos.docx

MANUAL DE PRÁCTICAS

INGENIERÍA EN SISTEMAS COMPUTACIONALES

PLAN ISIC-2004-296

PROGRAMACIÓN LÓGICA Y FUNCIONAL

SCC-1019

Page 2: Practicas y consejos.docx
Page 3: Practicas y consejos.docx

ÍndiceINTRODUCCIÓN----------------------------------------------------------------------------------------------------------------1

PRÁCTICA 1Conceptos fundamentales----------------------------------------------------------------------------------------------------1

PRÁCTICA 2Programación funcional-------------------------------------------------------------------------------------------------------1

PRÁCTICA 3Base de conocimiento---------------------------------------------------------------------------------------------------------1

PRÁCTICA 4Programación lógica------------------------------------------------------------------------------------------------------------1

PRÁCTICA 5Herramientas de sistemas expertos----------------------------------------------------------------------------------------1

PRÁCTICA 6Sistema experto-----------------------------------------------------------------------------------------------------------------1

LISTA DE MATERIAL, EQUIPO O REACTIVO A UTILIZAR-------------------------------------------------------1

LISTA DE BIBLIOGRAFÍA REQUERIDA--------------------------------------------------------------------------------1

CONTROL DE CAMBIOS DEL MANUAL DE PRÁCTICAS--------------------------------------------------------1

Page 4: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

INTRODUCCIÓN

La Programación Lógica y Funcional aporta la capacidad de desarrollar habilidades para la generación de soluciones automatizadas basadas en lenguajes de inteligencia artificial, considerando el entorno y la aplicación de diversas técnicas, herramientas y conocimientos.

Los programas para computadora actualmente son fundamentales en muchas áreas del ser humano, debido a que se usan para resolver diversos problemas en la ciencia, la industria y los negocios. Para cubrir estas necesidades, se han desarrollado lenguajes de programación dentro de la inteligencia artificial. El Ingeniero en Sistemas Computacionales contribuirá, aplicando estos conocimientos para la solución de problemas a través de la programación lógica y funcional, con una conciencia ética y de respeto al medio ambiente.

Se denomina inteligencia artificial a la rama de la ciencia informática dedicada al desarrollo de agentes racionales no vivos (agentes inteligentes). Es la disciplina quese encarga de construir procesos que al ser ejecutados sobre una arquitectura físicaproducen acciones o resultados que maximizan una medida de rendimiento determinada, basándose en la secuencia de entradas percibidas y en el conocimiento almacenado en tal arquitectura.

Los sistemas expertos, que reproducen el comportamiento humano en un estrecho ámbito del conocimiento; son programas tan variados como los que diagnostican infecciones en la sangre e indican un tratamiento, los que interpretan datos sismológicos en exploración geológica y los que configuran complejos equipos de alta tecnología.

La IA es un conjunto de métodos y filosofía, y por lo tanto no está atada a un lenguaje en particular. Los problemas de IA requieren que los programas manipulen conocimiento en lugar de números. Para lo anterior, se desarrollaron nuevos lenguajes para atacar estos problemas, como lo son: de programación simbólica y de programación lógica.

Fecha de Actualización 17/09/2013 Página 1

Page 5: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Práctica 1

CONCEPTOS FUNDAMENTALESObservaciones: Esta práctica incluye a la Práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”.

1.- OBJETIVO

Que el alumno conozca los conceptos fundamentales de los estilos de programación, evaluación de expresiones, definición de funciones y tipos de datos, para su retroalimentación.

2.- MARCO TEÓRICO

ESTILO DE PROGRAMACIÓN:

Estilo de programación (también llamado estándares de código o convención de código) es un

término que describe convenciones para escribir código fuente en ciertos lenguajes de programación.

El estilo de programación es frecuentemente dependiente del lenguaje de programación que se haya

elegido para escribir.

Ejemplo del siguiente pseudocódigo:

get horas minutos segundos

if horas < 24 and minutos < 60 and segundos < 60

return true

else

return false

Puede escribirse por ejemplo así:

if(horas < 24 && minutos < 60 && segundos < 60){ return true;}else{ return false;}

Fecha de Actualización 17/09/2013 Página 2

Page 6: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

O bien puede escribirse así:

if(horas < 24 && minutos < 60 && segundos < 60){ return true;}else{ return false;}

O así:

if(horas<24&&minutos<60&&segundos<60){return true;}else{return false;}

EVALUACIÓN DE EXPRESIONES

Las expresiones son secuencias de constantes y/o variables separadas por operadores válidos. Y son evaluadas con respecto a su orden de precedencia y este orden es muy similar en cada lenguaje de programación.

Se puede construir una expresión válida por medio de :

1. Una sola constante o variable, la cual puede estar precedida por un signo + ó - .

2. Una secuencia de términos (constantes, variables, funciones) separados por operadores.

Las reglas de evaluación para las expresiones son:

1. Si todos los operadores en una expresión tienen la misma precedencia, la evaluación de las operaciones se realiza de izquierda a derecha.

2. Cuando los operadores sean de diferentes precedencias, se evalúan primero las operaciones de más alta precedencia (en una base de izquierda a derecha), luego se evalúan las de precedencia siguiente, y así sucesivamente.

3. Las reglas 1) y 2) pueden ser anuladas por la inclusión de paréntesis en una expresión.

Por ejemplo en java se toma en cuenta lo siguiente operadores de precedencia:

A r i t m é t i c o s :     +       -       *     /     %       + +       - - R e l a c i o n a l e s :     <     < =     >     > =     = =     ! = L ó g i c o s :     !       & &       | |       ? : B i t s :     &     |     ^     ~     < <     > >     > > > A s i g n a c i ó n :     = + = - = * = / = % = & = | = ^ = ~ = < < = > > = > > > = O t r o s :     ( )       ,       ( c a s t )         n e w       i n s t a n c e o f

TIPOS DE DATOS

A. Tipos de datos simples

Es uno de los conceptos fundamentales de cualquier lenguaje de programación. Estos definen los métodos de almacenamiento disponibles para representar información, junto con la manera en que

Fecha de Actualización 17/09/2013 Página 3

Page 7: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

dicha información ha de ser interpretada.Para crear una variable (de un tipo simple) en memoria debe declararse indicando su tipo de variable y su identificador que la identificará de forma única. La sintaxis de declaración de variables es la siguiente:

TipoSimple Identificador1, Identificador2;

Esta sentencia indica al compilador que reserve memoria para dos variables del tipo simple  TipoSimple con nombres Identificador1 e Identificador2.

Los tipos de datos en Java pueden dividirse en dos categorías: simples y compuestos. Los simples son tipos nucleares que no se derivan de otros tipos, como los enteros, de coma flotante, booleanos y de carácter. Los tipos compuestos se basan en los tipos simples, e incluyen las cadenas, las matrices y tanto las clases como las interfaces, en general.

Cada tipo de datos simple soporta un conjunto de literales que le pueden ser asignados, para darles valor. En este apartado se explican los tipos de datos simples (o primitivos) que presenta Java, así como los literales que soporta (sintaxis de los valores que se les puede asignar).

a.) Tipos de datos enteros

Se usan para representar números enteros con signo. Hay cuatro tipos: byte, short, int y long.

Tipo Tamaño

byte 1Byte (8 bits)

short 2 Bytes (16 bits)

int 4 Bytes (32 bits)

long 8 Bytes (64 bits)

Literales enteros

Son básicos en la programación en Java y presentan tres formatos:

Decimal: Los literales decimales aparecen como números ordinarios sin ninguna notación especial.

Hexadecimal: Los hexadecimales (base 16) Octal: Los octales aparecen con un 0 inicial delante de los dígitos.

Por ejemplo, un literal entero para el número decimal 12 se representa en Java como 12 en decimal, como 0xC en hexadecimal, y como 014 en octal.

Los literales enteros se almacenan por defecto en el tipo int, (4 bytes con signo), o si se trabaja con números muy grandes, con el tipo long, (8 bytes con signo), añadiendo una L ó l al final del número.

La declaración de variables enteras es muy sencilla. Un ejemplo de ello sería:

long numeroLargo = 0xC; // Por defecto vale 12

b.) Tipos de datos en coma flotante

Fecha de Actualización 17/09/2013 Página 4

Page 8: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.

Tipo Tamaño

float 4 Byte (32 bits)

double 8 Bytes (64 bits)

Literales en coma flotante

Representan números decimales con partes fraccionarias. Pueden representarse con notación estándar (563,84) o científica (5.6384e2).

De forma predeterminada son del tipo double (8 bytes). Existe la opción de usar un tipo más corto (el tipo float de 4 bytes), especificándolo con una F ó f al final del número.

La declaración de variables de coma flotante es muy similar a la de las variables enteras. Por ejemplo:

double miPi = 314.16e-2 ; // Aproximadamente

float temperatura = (float)36.6; // Paciente sin fiebre

Se realiza un moldeado a temperatura, porque todos los literales con decimales por defecto se consideran double.

c.) Tipo de datos boolean

Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true y false. Representan valores bi-estado, provenientes del denominado álgebra de Boole.

Literales Booleanos

Java utiliza dos palabras clave para los estados: true (para verdadero) y false (para falso). Este tipo de literales es nuevo respecto a C/C++, lenguajes en los que el valor de falso se representaba por un 0 numérico, y verdadero cualquier número que no fuese el 0.

Para declarar un dato del tipo booleano se utiliza la palabra reservada boolean:

boolean reciboPagado = false; // ¡¿Aun no nos han pagado?!

d.) Tipo de datos carácter

Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.

Java a diferencia de C/C++ distingue entre matrices de caracteres y cadenas.

Literales carácter

Fecha de Actualización 17/09/2013 Página 5

Page 9: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Representan un único carácter (de la tabla de caracteres Unicode 1.1) y aparecen dentro de un par de comillas simples. De forma similar que en C/C++. Los caracteres especiales (de control y no imprimibles) se representan con una barra invertida ('\') seguida del código carácter.

Descripción Representación Valor Unicode

Caracter Unicode \udddd  

Numero octal \ddd  

Barra invertida \\ \u005C

Continuación \ \

Retroceso \b \u0008

Retorno de carro \r \u000D

Alimentación de formularios \f \u000C

Tabulación horizontal \t \u0009

Línea nueva \n \u000A

Comillas simples \’ \u0027

Comillas dobles \" \u0022

Números arábigos ASCII 0-9 \u0030 a \u0039

Alfabeto ASCII en mayúsculas A.-Z \u0041 a \u005A

Alfabeto ASCII en minúsculas a.-z \u0061 a \u007A

Las variables de tipo char se declaran de la siguiente forma:

char letraMayuscula = 'A'; // Observe la necesidad de las ' '

char letraV = '\u0056'; // Letra 'V'

e.) Conversión de tipos de datos

En Java es posible transformar el tipo de una variable u objeto en otro diferente al original con el que fue declarado. Este proceso se denomina "conversión", "moldeado" o "tipado". La conversión se lleva a cabo colocando el tipo destino entre paréntesis, a la izquierda del valor que queremos convertir de la forma siguiente:

char c = (char)System.in.read();

La función read devuelve un valor int, que se convierte en un char debido a la conversión (char), y el valor resultante se almacena en la variable de tipo carácter c.

El tamaño de los tipos que queremos convertir es muy importante. No todos los tipos se convertirán de forma segura. Por ejemplo, al convertir un long en un int, el compilador corta los 32 bits superiores del long (de 64 bits), de forma que encajen en los 32 bits del int, con lo que si contienen información útil, esta se perderá.

Fecha de Actualización 17/09/2013 Página 6

Page 10: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Por ello se establece la norma de que "en las conversiones el tipo destino siempre debe ser igual o mayor que el tipo fuente":

Tipo Origen Tipo Destino

byte double, float, long, int, char, short

short double, float, long, int

char double, float, long, int

int double, float, long

long double, float

float double

Tabla 8: Conversiones sin pérdidas de información

B. Vectores y Matrices

Una matriz es una construcción que proporciona almacenaje a una lista de elementos del mismo tipo, ya sea simple o compuesto. Si la matriz tiene solo una dimensión, se la denomina vector.

En Java los vectores se declaran utilizando corchetes ( [ y ] ), tras la declaración del tipo de datos que contendrá el vector. Por ejemplo, esta sería la declaración de un vector de números enteros (int):

int vectorNumeros[ ]; // Vector de números

Se observa la ausencia de un número que indique cuántos elementos componen el vector, debido a que Java no deja indicar el tamaño de un vector vacío cuando le declara. La asignación de memoria al vector se realiza de forma explícita en algún momento del programa.

Para ello o se utiliza el operador new:

int vectorNumeros = new int[ 5 ]; // Vector de 5 números

O se asigna una lista de elementos al vector:

int vectorIni = { 2, 5, 8}; // == int vectorIni[3]=new int[3];

Se puede observar que los corchetes son opcionales en este tipo de declaración de vector, tanto después del tipo de variable como después del identificador.

Si se utiliza la forma de new se establecerá el valor 0 a cada uno de los elementos del vector.

C. Cadenas

En Java se tratan como una clase especial llamada String. Las cadenas se gestionan internamente por medio de una instancia de la clase String. Una instancia de la clase String es un objeto que ha sido creado siguiendo la descripción de la clase.

Fecha de Actualización 17/09/2013 Página 7

Page 11: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Cadenas constantes

Representan múltiples caracteres y aparecen dentro de un par de comillas dobles. Se implementan en Java con la clase String. Esta representación es muy diferente de la de C/C++ de cadenas como una matriz de caracteres.

Cuando Java encuentra una constante de cadena, crea un caso de la clase String y define su estado, con los caracteres que aparecen dentro de las comillas dobles.

Vemos un ejemplo de cadena declarada con la clase String de Java:

String capitalUSA = "Washington D.C.";

String nombreBonito = "Amelia";

FUNCIONES

En Java una función es un modulo de un programa separado del cuerpo principal, que realiza una tarea específica y que puede regresar un valor a la parte principal del programa u otra función o procedimiento que la invoque.

La forma general de una función es:

tipodatoregresa Nom_fun(parametros)

{ cuerpo de instrucciones;

instrucción return;

}

El tipo especifica el tipo de valor que la función regresara utilizando la instrucción return.

Si no se especifica un tipo se asume de default que el tipo regresado es int.

La lista de parámetros formales es una lista de variables separadas por comas (,) que almacenaran los valores que reciba la función, estas variables actúan como locales dentro del cuerpo de la función.

Aunque no se ocupen parámetros los paréntesis son requeridos.

La declaración de parámetros es la especificación de cada tipo de parámetro recibido.

INSTRUCCION RETURN

Dentro del cuerpo de la función deber haber una instrucción return cuando menos, para regresar el valor, esta instrucción permite regresar datos.

3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR

Fecha de Actualización 17/09/2013 Página 8

Page 12: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Sistema Operativo Windows o Linux Internet Hojas blancas pinturas

4.- COMPETENCIAS ESPECÍFICAS

Identificar los paradigmas y lenguajes de programación representativa.

5. RESULTADOS

El alumno con su investigación realizara un mapa conceptual de cada tema de la unidad 1 (utilizando hojas blancas y colores para resaltar la información relevante) que incluye los conceptos fundamentales de los estilos de programación, evaluación de expresiones, definición de funciones y tipos de datos.

6. CONCLUSIONES

Al concluir esta práctica el alumno habrá comprendido la definición programación representativa así como los conceptos fundamentales de los estilos de programación, evaluación de expresiones, definición de funciones y tipos de datos, para su retroalimentación.

7.- BIBLIOGRAFÍA

1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).

Oxford University Press. 1998.

Práctica 2

PROGRAMACIÓN FUNCIONALObservaciones: Esta práctica incluye la práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la práctica # 3 “Desarrollo de programas funcionales con un grado creciente de complejidad, utilizando herramientas de programación funcional, que den solución a problemas reales.”.

Fecha de Actualización 17/09/2013 Página 9

Page 13: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

1.- OBJETIVO

Que el alumno realice programas funcionales con un grado creciente de complejidad utilizando herramientas de programación que den solución a problemas reales.

2.- MARCO TEÓRICO

PROGRAMACIÓN FUNCIONAL

¿Qué es la programación funcional? En pocas palabras, la programación funcional — una paradigma de programación en la cual las funciones son objetos. Como consecuencia se puede asignar funciones a las variables, pasarlas como argumentos a otras funciones, devolver como resultado de otras funciones, etc. 

la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.

Los lenguajes de programación funcional, especialmente los que son puramente funcionales, han sido

enfatizados en el ambiente académico principalmente y no tanto en el desarrollo de software comercial.

Sin embargo, lenguajes de programación importantes tales como Scheme, Erlang, Rust, Objective

Caml y Haskell, han sido utilizados en aplicaciones comerciales e industriales por muchas

organizaciones. La programación funcional también es utilizada en la industria a través de lenguajes de

dominio específico como R (estadística), Mathematica (matemáticas simbólicas), J y K (análisis

financiero), F# en Microsoft.NET y XSLT (XML). Lenguajes de uso específico usados comúnmente

como SQL y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al

procesar valores mutables. Las hojas de cálculo también pueden ser consideradas lenguajes de

programación funcional.

La programación funcional también puede ser desarrollada en lenguajes que no están diseñados

específicamente para la programación funcional. En el caso de Perl, por ejemplo, que es un lenguaje de

programación imperativo, existe un libro que describe como aplicar conceptos de programación

funcional. JavaScript, uno de los lenguajes más ampliamente utilizados en la actualidad, también

incorpora capacidades de programación funcional. Python también incorpora particularidades de los

lenguajes funcionales como listas de comprensión y funciones de tratamiento de listas como

matemática de conjuntos.

3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR

Sistema Operativo Windows Lenguaje de programación HASKELL Procesador de textos.

Fecha de Actualización 17/09/2013 Página 10

Page 14: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

4.- COMPETENCIAS ESPECÍFICAS

Conocer los principales puntos fuertes y debilidades del paradigma de programación funcional

Identificar los elementos de la programación funcional.

Aplicar la programación funcional en la resolución de problemas reales.

E identificar los conceptos claves de cada tema , incluyéndolos en un glosario de términos.

ACTIVIDAD:

Realizar un programa que reciba una lista que contenga varias palabras y reciba un parámetro referente a la longitud de cada línea. Al final debe regresar un párrafo que contenga las mismas palabras, pero justificadas en el párrafo.

Ejemplo

Párrafo 15 “hola soy la asignatura de programación lógica funcional y esta es la práctica”

Regresa

hola soy la

asignatura de

programación

lógica

funcional y

esta es la

practica

5. RESULTADOS El alumno podrá aplicar la programación funcional en la resolución de problemas reales realizando el programa del párrafo 15 entregando el código y la corrida en un reporte de la actividad.

6. CONCLUSIONES

Al concluir esta práctica el alumno habrá comprendido la definición programación funcional.

7.- BIBLIOGRAFÍA

1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).

Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical

(Intelligent Reasoning by Example). John Wiley. 1994.

Fecha de Actualización 17/09/2013 Página 11

Page 15: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

5. Haskell. The craft of functional programming. Cap 1- Cap 7

Práctica 3

BASE DE CONOCIMIENTOSObservaciones: Esta práctica incluye a la práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 4 “Diseñar y construir una conocimientos a través de la programación funcional”.

1.- OBJETIVO

Que el alumno aprenda a crear su base de conocimientos a través de la programación funcional.

Fecha de Actualización 17/09/2013 Página 12

Page 16: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

2.- MARCO TEÓRICO

El objetivo de una base de conocimientos es el de modelar y almacenar bajo forma digital un conjunto de conocimiento, ideas, conceptos o datos que permitan ser consultados o utilizados. 

Existen varios métodos y programas para crear bases de conocimientos:

Wiki

CMS

Mindmap

Concept map

Sistema experto

El formato “foro”

3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR

Sistema Operativo Windows Lenguaje de programación HASKELL Procesador de textos.

4.- COMPETENCIAS ESPECÍFICAS

Aplicar la programación funcional en la resolución de problemas reales.

5. RESULTADOS

El alumno construirá una base de conocimientos a través de la programación funcional

Fecha de Actualización 17/09/2013 Página 13

Page 17: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

6. CONCLUSIONES

El alumno aprenderá a crear su base de conocimientos a través de la programación funcional.

7.- BIBLIOGRAFÍA

1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).

Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical

(Intelligent Reasoning by Example). John Wiley. 1994.5. Haskell. The craft of functional programming. Cap 1- Cap 7

Fecha de Actualización 17/09/2013 Página 14

Page 18: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Práctica 4

PROGRAMACIÓN LÓGICAObservaciones: Esta práctica incluye a la práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”, Práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 5 que dice “Desarrollo de programas lógicos con un grado creciente de complejidad, utilizando herramientas de programación lógica, que den solución a problemas reales”.

1.- OBJETIVO

Que el alumno aplique la programación lógica en la solución de problemas reales.

2.- MARCO TEÓRICO

La programación lógica es un intento de definir un estilo de programación alternativo al estilo convencional de von Neumann. En él, el programador describe indirectamente un proceso, definiendo un conjunto de asertos o condiciones, las cuales deben ser satisfechas en orden a que el proceso complete su tarea. El propio algoritmo resultante no está completamente bajo el control del programador, sino que el programador debe conocer el mecanismo de control subyacente para especificar un conjunto correcto de asertos.

La programación lógica implica forzosamente al uso de hechos y relaciones para representar la

información y al de deducciones para responder a consultas. Las consultas permiten conocer

informaciones sobre las relaciones. Estos dos aspectos reflejan una división de labores entre los

programadores y un lenguaje para la programación lógica. El programador proporciona las reglas y los

hechos, mientras que el lenguaje usa la deducción para dar respuesta a consultas. Esta división de

labores es usualmente representado por la ecuación: algoritmo = lógica + control

La lógica se refiere a los hechos y reglas que especifican lo que realiza el algoritmo, y el control se

refiere a cómo puede implementarse el algoritmo mediante la aplicación de reglas en un orden

particular. El programador proporciona la parte lógica y el lenguaje de programación proporciona el

control. Las consultas en los programas lógicos pueden usarse de dos formas: 1. Para determinar si un

determinado conjunto de valores pertenece a una relación, en las cuales el intérprete responde Si, en

caso de pertenecer la tupla, y Fracaso en caso de fracasar la deducción de una respuesta Si. 2. Para

determinar una instancia de valores para cada una de las variables presentes en la consulta, que pueda

deducirse a partir de las reglas y hechos del programa lógico.

3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR

Fecha de Actualización 17/09/2013 Página 15

Page 19: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Sistema Operativo Programa prolog. Procesador de Textos

4.- COMPETENCIAS ESPECÍFICAS

Conocer las ventajas y desventajas del paradigma de programación lógica.

Conocer las ventajas y desventajas de la programación lógica.

Aplicar la programación lógica en la resolución de problemas reales.

ACTIVIDAD: Realizar un programa en prolog que genere la base de conocimientos para el siguientes esquema de familiares

Y se responda a los siguientes preguntas:

Crear una regla para demostrar si clara es bisabuela de Jaime

Crear una regla para demostrar si Patricia es nieta de Tomas.

5. RESULTADOS

Elaborar un programa utilizando herramientas de la programación lógica.

Fecha de Actualización 17/09/2013 Página 16

Page 20: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

6. CONCLUSIONESEl alumno desarrollara programas lógicos con un grado creciente de complejidad, utilizando herramientas de programación lógica, que den solución a problemas reales

7.- BIBLIOGRAFÍA

1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).

Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical

(Intelligent Reasoning by Example). John Wiley. 1994.5. Haskell. The craft of functional programming. Cap 1- Cap 7

Fecha de Actualización 17/09/2013 Página 17

Page 21: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Práctica 5

HERRAMIENTAS DE SISTEMAS EXPERTOSObservaciones: Esta práctica incluye a la práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”, la Práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 6 que dice “A partir de una situación real. Diseñar y construir una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica”.

1.- OBJETIVO

Que el alumno a partir de una situación real, diseñe y construya una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica.

2.- MARCO TEÓRICO

Es una aplicación informática capaz de solucionar un conjunto de problemas que exigen un gran

conocimiento sobre un determinado tema. Un sistema experto es un conjunto de programas que,

sobre una base de conocimientos, posee información de uno o más expertos en un área

específica. Se puede entender como una rama de la inteligencia artificial, donde el poder de

resolución de un problema en un programa de computadora viene del conocimiento de un dominio

específico. Estos sistemas imitan las actividades de un humano para resolver problemas de

distinta índole (no necesariamente tiene que ser de inteligencia artificial). También se dice que un

SE se basa en el conocimiento declarativo (hechos sobre objetos, situaciones) y el conocimiento

de control (información sobre el seguimiento de una acción).

Para que un sistema experto sea herramienta efectiva, los usuarios deben interactuar de una

forma fácil, reuniendo dos capacidades para poder cumplirlo:

1. Explicar sus razonamientos o base del conocimiento : los sistemas expertos se deben

realizar siguiendo ciertas reglas o pasos comprensibles de manera que se pueda generar

la explicación para cada una de estas reglas, que a la vez se basan en hechos.

2. Adquisición de nuevos conocimientos o integrador del sistema : son mecanismos de

razonamiento que sirven para modificar los conocimientos anteriores. Sobre la base de lo

anterior se puede decir que los sistemas expertos son el producto de investigaciones en el

campo de la inteligencia artificial ya que ésta no intenta sustituir a los expertos humanos,

sino que se desea ayudarlos a realizar con más rapidez y eficacia todas las tareas que

realiza.

Fecha de Actualización 17/09/2013 Página 18

Page 22: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Debido a esto en la actualidad se están mezclando diferentes técnicas o aplicaciones

aprovechando las ventajas que cada una de estas ofrece para poder tener empresas más

seguras. Un ejemplo de estas técnicas sería los agentes que tienen la capacidad de negociar y

navegar a través de recursos en línea; y es por eso que en la actualidad juega un papel

preponderante en los sistemas expertos.

La Base de Conocimientos (BC).

Son el conjunto de reglas que permiten representar los conocimientos del dominio de experto donde

cada regla aisladamente tiene significado propio. Normalmente los conocimientos son de tipo

declarativo por lo cual la BC casi siempre es una descripción de los conocimientos del experto, por lo

tanto requiere de algún mecanismo que obtenga las inferencias adecuadas para resolver el problema,

alguien que seleccione las reglas y las vaya ejecutando, ese alguien es el motor de inferencias.

El Motor de Inferencias (MI) es un programa de control cuya función es seleccionar las reglas posibles a

satisfacer el problema, para ello se vale de ciertas estrategias de control sistemáticas o de estrategias

heurísticas.

3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR

Sistema Operativo Procesador de Textos Programa prolog.

4.- COMPETENCIAS ESPECÍFICAS

Identificar los elementos de la programación lógica

Elaborar una base de conocimientos para definir los animales existentes en un zoológico.

5. RESULTADOS

El alumno elaborara su base de conocimientos para un problema real.

6. CONCLUSIONES

El alumno a partir de una situación real, diseña y construye una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica.

7.- BIBLIOGRAFÍA

1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach). Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.

Fecha de Actualización 17/09/2013 Página 19

Page 23: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Práctica 6

SISTEMA EXPERTOObservaciones: Esta práctica incluye a la práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”, la Práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 7 que dice “Construir un sistema experto a partir de la base de conocimiento creada en programación lógica”.

1.- OBJETIVO

Que el alumno construya un sistema experto a partir de la base de conocimiento creada en programación lógica

2.- MARCO TEÓRICO

Los sistemas expertos son llamados así porque emulan el razonamiento de un experto en un dominio concreto y en ocasiones son usados por éstos. Con los sistemas expertos se busca una mejor calidad y rapidez en las respuestas dando así lugar a una mejora de la productividad del experto.

Los Sistemas Expertos, rama de la Inteligencia Artificial, son sistemas informáticos que simulan el proceso de aprendizaje, de memorización, de razonamiento, de comunicación y de acción en consecuencia de un experto humano en cualquier rama de la ciencia. 

Estas características le permiten almacenar datos y conocimiento, sacar conclusiones lógicas, tomar decisiones, aprender de la experiencia y los datos existentes, comunicarse con expertos humanos, explicar el por qué de las decisiones tomadas y realizar acciones como consecuencia de todo lo anterior.

Técnicamente un sistema experto, contiene una base de conocimientos que incluye la experiencia acumulada de expertos humanos y un conjunto de reglas para aplicar ésta base de conocimientos en una situación particular que se le indica al programa. Cada vez el sistema se mejora con adiciones a la base de conocimientos o al conjunto de reglas.

¿Por qué utilizar un Sistema Experto?

1. Con la ayuda de un Sistema Experto, personas con poca experiencia pueden resolver problemas que requieren un "conocimiento formal especializado".

2. Los Sistemas Expertos pueden obtener conclusiones y resolver problemas de forma más rápida que los expertos humanos. 

3. Los Sistemas Expertos razonan pero en base a un conocimiento adquirido y no tienen sitio para la subjetividad.

4. Se ha comprobado que los Sistemas Expertos tienen al menos, la misma competencia que un especialista humano.

5. El uso de Sistemas Expertos es especialmente recomendado en las siguientes situaciones:o Cuando los expertos humanos en una determinada materia son escasos.

Fecha de Actualización 17/09/2013 Página 20

Page 24: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

o En situaciones complejas, donde la subjetividad humana puede llevar a conclusiones erróneas.

o Cuando es muy elevado el volumen de datos que ha de considerarse para obtener una conclusión.

Aplicaciones

Medicina, Economía, Psicología, Finanzas, Derecho y prácticamente todas las ramas del conocimiento.

3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR

Sistema Operativo Procesador de Textos Programa prolog

4.- COMPETENCIAS ESPECÍFICAS

Desarrollar mediante el siguiente esquema un sistema experto:

Fecha de Actualización 17/09/2013 Página 21

Page 25: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

Región

Tipo de Comida

Potaje

Ingredientes

Enfermedades

Sistema Humano Atacado

Especialista

Costa, Sierra y Selva

Entrada, Plato de Fondo, Sopa, Postre y Bebidas

Nombre Específico

Nombre de los Ingredientes

Nombre de la enfermedad

Por ejemplo: Sistema Digestivo, etc.

Por ejemplo: Gastroenterólogo, etc.

Hospital Por ejemplo: Dos de Mayo

Fecha de Actualización 17/09/2013 Página 22

Page 26: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

5. RESULTADOS

El alumno aprenderá a realizar sistemas expertos con programación lógica , mediante la creación de un sistema experto de comidas curativas.

6. CONCLUSIONES

El alumno a partir de una situación real, diseñe y construya una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica.

7.- BIBLIOGRAFÍA

1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach). Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical (Intelligent Reasoning by Example). John Wiley. 1994.

Fecha de Actualización 17/09/2013 Página 23

Page 27: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

8.- LISTA DE MATERIAL, EQUIPO O REACTIVO A UTILIZAR

FOLIO NOMBRE DEL MATERIAL, EQUIPO O REACTIVO CANT. UNIDAD

1 Sistema operativo Windows

2 Procesador de textos Word

3 Programa haskell

4 Programa prolog

9.- LISTA DE BIBLIOGRAFÍA REQUERIDA

FOLIO BIBLIOGRAFIA CANT

1 NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001. 1

2POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach). Oxford University Press. 1998.

1

3BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.

1

4MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical (Intelligent Reasoning by Example). John Wiley. 1994.

1

5

6

Fecha de Actualización 17/09/2013 Página 24

Page 28: Practicas y consejos.docx

Programación lógica y funcional [SCC-1019]

10.- CONTROL DE CAMBIOS DEL MANUAL DE PRÁCTICAS

DATOS GENERALESFECHA DE

ACTUALIZACION ELABORÓ Y/O ACTUALIZÓ DESCRIPCIÓN DE LA ACTUALIZACIÓN

17/09/2013 MSC. VIANNEY MORALES ZAMORA Se actualizo el temario al nuevo plan

Fecha de Actualización 17/09/2013 Página 25