sábado, 11 de febrero de 2017


Instituto Tecnológico Superior de

 Nochistlán





Ingeniería en Sistemas Computacionales
Programación Lógica y Funcional

Docente: Ing. Elías Ramírez Díaz




Unidad 1. Conceptos Fundamentales

Desarrollado por: Sergio Donoso Ramírez, Luis Alberto Agredano Becerra, Eulicse Ibarra Zavala




Nochistlán de Mejía, Zac. A 09 de febrero de 2017.






Programación Lógica y Funcional

Conceptos fundamentales



Introducción

La Programación Lógica y Funcional, es una asignatura que requiere tener conocimientos esenciales acerca de los lenguajes lógicos y funcionales de la inteligencia artificial, incluyendo la metodología y los aspectos relativos a la codificación, con el fin de ampliar el conocimiento de tecnologías alternativas para el desarrollo de sistemas automatizados y la implementación de agentes inteligentes. 
Hoy en día existe una gran cantidad de aplicaciones de la programación lógica y funcional, tal es el caso de sistemas expertos, donde un sistema de información imita las recomendaciones de un experto sobre algún dominio de conocimiento. Demostración automática de teoremas, donde un programa genera nuevos teoremas sobre una teoría existente. Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la información contenida en una expresión lingüística humana.
Debido a ello es muy interesante conocer sobre estos temas, ya que abordan información relevante al desarrollo de los anteriormente mencionado, pero claro como es de esperarse, todo tiene un fundamento, por tal motivo a continuación, se explicaran algunos de estos.

Programación lógica y funcional


La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación, es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcional, programación basada en restricciones, programas DSL (de dominio específico) e híbridos. La programación lógica gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático.

     















1.1 Estilos de programación

Indica las características en cuanto a la forma en que se usan las instrucciones para elaborar un programa. Estilo es alguna disciplina más allá de un simple conjunto re restricciones sobre qué tipo de instrucciones usar. Por buen estilo de programación hay que considerar la expresividad, la estructura, la robustez y la documentación de un programa, (Mañas, 2003).


El estilo de programación es frecuentemente dependiente del lenguaje de programación que se haya elegido para escribir. Por ejemplo el estilo del lenguaje de programación C variará con respecto al del lenguaje BASIC.
  • Estilo K&R es el mas utilizado en el lenguaje C y PHP, el estilo fue llamado de esta forma porque fue usado por Kernighan y Ritchies en su libro The C Programming Lenguage.
  • Estilo Allman fue definido por Eric Allman, se trata de crear una nueva lineas para las llaves, e identar el códogo debajo de ellas.
  • Estilo BSD KNF tambien conocido como estilo Kernel Normal From, es la manera más usada para el codigo de la distribucción del software del sistema operativo de Berkeley.
  • Estilo Whitesmiths también llamado estilo wishart, se coloca las llaves asociadas con la instrucciones de control indentada.
  • Estilo GNU este coloca una llave sobre la linea las llaves son identadas por 2 espacios y el código que contiene identada por 2 espacios adicionales, (Marquez, 2014).



La importancia del estilo
Las personas creativas, como los artistas, escritores (Poema de Nicanor Parra, poeta es ejemplo de estilo propio) y arquitectos, trabajan con mucha intensidad durante el período de estudios para llegar a manejar los secretos de su oficio. Al mismo tiempo, desarrollan un estilo que es único e identificable para cada uno. Estilo de ellos. Este estilo no es accidental para llegar a triunfar en su trabajo; para que tengan éxito, es preciso que su estilo sea preferido en el mercado por encima de sus demás colegas.

Algunos estilos
Cada programador tiene su propio estilo para escribir. Un buen estilo para programar deberá tener una estructura de código fácil de entender, no solo para otra gente sino también para si mismo. Aquí hay varios criterios para un buen estilo:

  1. Nombres significativos para variables, controles, y procedimientos.
  2. Identación (sangrías) y espacios apropiados en el código.
  3. documentar el código (poner comentarios para aclarar).
  4. Módulos adaptables.
  5. Minimizar el acoplamiento.
  6. Minimizar alcance de los datos hasta donde sea posible.

(Estilos de programación, 2016).

Muchas veces el que un programa funcione o no es en buena medida independiente de que esté bien o mal escrito. No obstante:
  • Un programa mal escrito tiene una probabilidad mayor de no funcionar correctamente, un buen estilo facilita la corrección.
  • Es imposible depurar un programa mal escrito.
  • Es imposible mantener un programa mal escrito.
  • Para determinar si un programa está bien escrito estimaremos su legibilidad o capacidad de comunicar lo que hace a otros programadores que tengan que leer el código fuente (para evaluarlo, mantenerlo o repararlo). Por ello escribir un buen programa es tan difícil como escribir un buen libro.

1.2 Evaluación de expresiones

Una expresión es una combinación de operadores y operandos de cuya evaluación se obtiene un valor. Los operandos pueden ser nombres que denoten objetos variables o constantes, funciones, literales de cualquier tipo adecuado de acuerdo con los operadores u otras expresiones más simples. La evaluación de una expresión da lugar a un valor de algún tipo, una expresión se dice que es del tipo de su resultado. 





Las expresiones se evalúan de acuerdo con la precedencia de los operadores. Ante una secuencia de operadores de igual precedencia, la evaluación se realiza según el orden de escritura, de izquierda a derecha. El orden de evaluación puede modificarse usando paréntesis. 

Tipos de expresiones 

  • Aritméticas: las que devuelven un valor numérico 
  • Lógicas: las que devuelven true o false 

Dentro de las expresiones distinguimos dos clases según el tipo de datos que devuelven al evaluarlas: 
Las expresiones se utilizan fundamentalmente en las asignaciones y en las partes condicionales de las sentencias if, while y repeat. 


En general, salvo que se relacionen con las mencionadas sentencias modificadoras del flujo, las palabras-clave señalan al compilador aspectos complementarios que no alteran el orden de ejecución dentro de la propia sentencia. Este orden viene determinado por cuatro condicionantes: 
  1. Presencia de paréntesis que obligan a un orden de evaluación específico. 
  2. Naturaleza de los operadores involucrados en la expresión (asociatividad). 
  3. Orden en que están colocados (precedencia). 
  4. Providencias (impredecibles) del compilador relativas a la optimización del código, (Marquez, 2014). 

1.3 Definición de funciones


En computación, una subrutina o subprograma (también llamada procedimiento, función o rutina), como idea general, se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica. Algunos lenguajes de programación, como Visual Basic.NET o Fortran, utilizan el nombre función para referirse a subrutinas que devuelven un valor.


Desde un punto de vista práctico, podemos decir que una función es una parte de un programa (subrutina) con un nombre, que puede ser invocada (llamada a ejecución) desde otras partes tantas veces como se desee. Un bloque de código que puede ser ejecutado como una unidad funcional. Opcionalmente puede recibir valores; se ejecuta y puede devolver un valor. Desde el punto de vista de la organización, podemos decir que una función es algo que permite un cierto orden en una maraña de algoritmos.




Ejemplo de programación lógica y funcional en  Haskell


Las funciones son la parte central de la programación y para hacer declaraciones de funciones generalmente se debe especificar lo siguiente: 
  • Un nombre único en el ámbito: Nombre de la función con el que se identifica y se distingue de otras. No podrá haber otra función ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programación orientada a objetos). 
  • Un tipo de dato de retorno: tipo de dato del valor que la función devolverá al terminar su ejecución. 
  • Una lista de parámetros: Especificación del conjunto de argumentos (pueden ser cero, uno o más) que la función debe recibir para realizar su tarea. 

El código u órdenes de procesamiento: conjunto de órdenes y sentencias que debe ejecutar la función.La forma general del prototipo de una función es: valor-devuelto nombre-función (lista-de-argumentos); La forma general de la definición es:
valor-devuelto nombre-función (lista-de-argumentos) {
  sentencias;         // "cuerpo" de la función
}
Ejemplo
float cuadrado (float x);                // prototipo
float cuadrado (float x) { return x*x; } // definición
(EcuRed conocimiento con todos y para todos, 2017).


1.4 Disciplina de tipos


Los tipos se infieren, es decir se comprueban, de forma estática, en tiempo de compilación. En los lenguajes de programación con disciplina de tipos, cada tipo representa una colección de valores o datos similares. El conocer los tipos de las funciones ayuda a documentar los programas y evitar errores en tiempo de ejecución.



Un lenguaje tiene disciplina de tipos si los errores de tipos se detectan siempre, es necesario determinar los tipos de todos los operandos, ya sea en tiempo de compilación o de ejecución.


  • Poseen disciplina de tipos
  • Los tipos de los parámetros de las funciones (y de estas mismas) se conocen en tiempo de compilación (ya sea por declaración del usuario o por inferencia de tipos)
  • Haskell y otros lenguajes funcionales utilizan el sistema de tipos de Milner, que tiene dos características fundamentales:
    • Disciplina estática de tipos: Los programas bien tipados se pueden conocer en tiempo de compilación. Un programa bien tipado se puede utilizar sin efectuar comprobaciones de tipo en tiempo de ejecución, estando garantizado que no se producirán errores de tipo durante el cómputo.
    • Polimorfismo: Permite que una misma función se pueda aplicar a parámetros de diferentes tipos, dependiendo del contexto en el que la función se utilice, (URIEL SOSA GAYOSSO, 2016).


1.5 Tipos de datos






Un tipo de datos es la propiedad de un valor que determina su dominio (qué valores puede tomar), qué operaciones se le pueden aplicar y cómo es representado internamente por el computador.

Todos los valores que aparecen en un programa tienen un tipo.







Por ejemplo, si escribimos un programa sencillo que sume,reste,multiplique y divida (una calculadora basica) sera necesario emplear tipos de datos numéricos que pueden ser : enteros o flotantes.

Tipos de datos enteros

byte
El tipo de dato byte puede representar datos enteros que se encuentren en el rango de -128 a +127.
El tamaño de un dato de tipo byte es de 8 bits.

short
El tipo de dato short puede representar datos enteros que se encuentren en el rango de -32768 y +32767.
El tamaño de un dato de tipo short es de 16 bits.

int
El tipo de dato int puede representar datos enteros que se encuentren en el rango de -2147483648 y +2147483647.
El tamaño de un dato de tipo int es de 32 bits.

long
El tipo de dato int puede representar datos enteros que se encuentren en el rango de -9223372036854775808 y +9223372036854775807.
El tamaño de un dato de tipo int es de 64 bits.
Para indicar de manera explicita que el dato es un long , se agrega una L o l al final del valor de la variable.


Tipos de datos flotantes

float
El tipo de dato float puede representar datos en coma flotante que se encuentren en el rango de 1.40239846e–45f y 3.40282347e+38f.
El tamaño de un dato de tipo short es de 32 bits. 
Para indicar de manera explicita que el dato es un float , se agrega una F o f al final del valor de la variable.

double
El tipo de dato double puede representar datos en coma flotante que se encuentren en el rango de 4.94065645841246544e–324d y 1.7976931348623157e+308d.
Para indicar de manera explicita que el dato es un double , se agrega una D o d al final del valor de la variable.


Tipo de dato boolean

El tipo de dato boolean puede representar dos valores lógicos: true(verdadero) o false(falso).


Tipo de dato char

El tipo de dato char se usa para representar caracteres(código Unicode).
Un carácter es representado internamente por un entero.
(Programación estructurada, 2017).




Conclusión

Los lenguajes de programación refieren a distintos tipos de expresiones y reglas de estructuración lógica que sirven para generar tareas recurrentes y sistemáticas. Los mismos son de gran importancia porque permiten generar distintos sistemas que sirven para tareas que satisfacen las necesidades de los usuarios. Existe una gran variedad de estos lenguajes y en cualquier caso los mismos se orientan a distintos tipos de requerimientos; no obstante, puede dividirse esta pluralidad en dos grandes grupos, los lenguajes de programación estructurada y los lenguajes orientados a objetos. Casi todo lo que podemos utilizar en informática se debe en buena medida a los lenguajes de programación.Es por ello que conocer la forma lógica en que estos trabajan es la base para comprender su funcionamiento y por tal motivo, nosotros poder emplearlos programando las necesidades que tengamos.En si todos los lenguajes de programación comparten ciertas similitudes, tal como, todos tienen métodos, tipos de datos, formas de escribir código, etc. por ello es importante conocer esto, ya que nos llevara a realizar lo que deseemos con estos lenguajes.






Bibliografía

EcuRed conocimiento con todos y para todos. (2017). Obtenido de https://www.ecured.cu/Funci%C3%B3n_(programaci%C3%B3n)
Estilos de programación. (2016). Obtenido de http://www.pablin.com.ar/computer/cursos/vb1/programm.htm
Mañas, J. A. (2003). Laboratorio de Programación. Obtenido de http://www.lab.dit.upm.es/~lprg/material/apuntes/doc/estilo.htm
Marquez, S. J. (2014). PROGRAMACIÓN LÓGICA Y FUNCIONAL. Obtenido de http://programacionlogyfun.blogspot.mx/2016/03/programacion-logica-y-funcional-la.html
Programación estructurada. (2017). Obtenido de https://sites.google.com/site/programacion1electronica/netbeans/tipos-de-datos
URIEL SOSA GAYOSSO, G. A. (2016). Obtenido de http://plfsc.blogspot.es/



























3 comentarios:

  1. Muy buen blog compañeros aquí nos muestran como los distintos tipos de expresiones y reglas de estructuración lógicos, nos sirven para generar tareas y la similitud y diferencias que existen en los diferentes paradigmas de programación, los vídeos complementan muy bien la información aquí dada.

    ResponderBorrar
  2. Orale! me gusto el contenido de su blog, es de imvestigacion amplia con videos. Hay que tomar mucho en cuenta el lenguaje de programacion que con le que se desarrollara y saberlo estructurar para ahorrar tiempo y satisfacer en lo que mas se pueda al cliente.

    ResponderBorrar
  3. En mi opinión el blog tiene un buen contenido, en mi experiencia personal, comencé con el paradigma orientado a objetos en el cual primero tuve que aprender los tipos de datos junto con la evaluación de expresiones para estructurar un programa de manera correcta y poder reducir las líneas de código lo más posible y optimizar los tiempos de respuesta.

    ResponderBorrar