domingo, 12 de febrero de 2017

Programación Lógica y Funcional

La Programación Lógica estudia el uso de la lógica para el planteamiento de problemas y el control sobre las reglas de inferencia para alcanzar la solución automática.


La Programación Lógica, junto con la funcional, forma parte de lo que se conoce como Programación Declarativa, es decir la programación consiste en indicar como resolver un problema mediante sentencias, en la Programación Lógica, se trabaja en una forma descriptiva, estableciendo relaciones entre entidades, indicando no como, sino que hacer, entonces se dice que la idea esencial de la Programación Lógica es:

(Programa= lógica + control

Lógica (programador): hechos y reglas para representar conocimiento

Control (interprete): deducción lógica para dar respuestas (soluciones));

Caracteristicas de la PLF

    

    La programación lógica fué introducida por Colmerauer y su grupo a partir de sus trabajos sobre "Procesamiento del lenguaje natural", es que: "la lógica puede ser usada como un lenguaje de programación". El interés por ella creció al ser la base teórica del PROLOG, lenguaje de repentino y "popular" éxito al ser incluido en el proyecto japonés de la quinta generación. Razones de eficiencia hacen que el PROLOG sea diferente de la programación lógica: se suprime un importante test en el algoritmo de unificación ("occur-check") y se añade una facilidad de control ("cut") que afecta a la completitud del lenguaje. Esto dificulta aplicar a su estudio los resultados teóricos de la programación lógica.

     La programación lógica: construye base de conocimientos mediante reglas y hechos:

  • Regla: implicación o inferencia lógica que deduce nuevo conocimiento, la regla permite definir nuevas relaciones a partir de otras ya existentes.
  • Hecho: declaración, cláusula o proposición cierta o falsa, el hecho establece una relación entre objetos y es la forma más sencilla de sentencia.
Estilos de programación 
Se tiene por entendido que se conoce los conceptos básicos de algún lenguaje de programación para poder comprender los estilos de programación (también llamados estándares de código o convención de código). El termino de "Estilo de programación" describe la forma en que un ser humano hace las operaciones  necesarias para dictarle a la computadora en forma de "código" el problema que necesita resolver dependiendo de el lenguaje de programación. 


Si una persona es programador o esta estudiando sistemas computacionales, se debe tener en el pensamiento que el código que se esta realizando en practicas y mas que nada en proyectos, debe de tener las siguientes cualidades:


  • Extensibilidad: Se refiere a la facilidad con que se adapta el software en desarrollo a cambios de especificación.
  • Verificabilidad: Se refiere a la facilidad con que pueden comprobarse las propiedades de un sistema. De esta manera es mas fácil comunicar a un equipo de trabajo lo que se esta creando.
  • Reparabilidad: Se refiere a la posibilidad de corregir errores sin demasiado esfuerzo. Con la finalidad de trabajar a un ritmo mas rápido.
  • Capacidad de evolución: Se debe tener que todos los proyectos con la capacidad de adaptarse a nuevas necesidades.
  • Comprensibilidad: La facilidad con que el programa puede ser comprendido visto desde diferentes ángulos. O vistas desde diferentes personas.
     Se puede también referir a los "Estilos de programación" con "Paradigmas de la programación". Esto con la finalidad de hacer mas extenso el aprendizaje. Los paradigmas de programación son la forma, que determinan los métodos y las herramientas que un programador usará en la construcción de un software. Los lenguajes de programación están basados en uno o más paradigmas, ha estos se les puede llamar multiparadigmas. Ningún paradigma es capaz de resolver todos los problemas de forma sencilla y eficiente, por lo tanto es útil poder elegir entre distintos “estilos” de programación dependiendo del tipo de problema.


La programación orientada a objetos es un paradigma de programación donde existen objetos que manipulan los datos por medio de métodos y atributos. Se pueden heredar datos y características de estos objetos. Este estilo es llamado así por su rápida manipulación. 


    El lenguaje de programación orientada a eventos es un paradigma en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen, aunque en cualquier momento puede ocurrir una intervención de un agente externo al programa es el creador de un programa dirigió por eventos debe definir los eventos que manejarán su programa y las acciones que se realizarán al producirse cada uno de ellos. 


     La programación lógica se define como sistemas deductivos los cuales utilizan la lógica proposicional, la lógica relacional y la lógica funcional. Este código define reglas para que los sistemas expertos tengan una respuesta a preguntas del lenguaje natural. 


     La programación estructurada es un paradigma de programación orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa de computadora, utilizando únicamente subrutinas y tres estructuras: secuencia, selección (if y switch) e iteración (bucles for y while), considerando innecesario y contraproducente el uso de la instrucción de transferencia incondicional (GOTO), que podría conducir a "código espagueti", que es mucho más difícil de seguir y de mantener, y era la causa de muchos errores de programación. "Código leído de arriba hacia abajo." 


   En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en el uso de funciones matemáticas, en contraste con la programación imperativa, que enfatiza los cambios de estado mediante la mutación de variables. 


    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 Java variará con respecto al del lenguaje Ensamblador. 


   En pocas palabras el estilo de programación indica las características en cuanto a la forma en que se usan las instrucciones para elaborar un programa.





Evaluación de expresiones 


Una expresión es una combinación de operadores y operandos cuya evaluación se obtiene un valor. En caso de la programación hay diferentes operadores para realizar una evaluación. Los operadores aritméticos son los mismos: 
  • Suma (+) 
  • Resta (-) 
  • Multiplicación (*) 
  • División (/) 
  • Modulo (%) 
    Comienza a diferir un poco en el momento en que se escoge un lenguaje de programación para la resolución de expresiones mas complejas o sentencias que requieren de operadores relacionales, como por ejemplo: 
  • Distinto de ( != ) 
  • Conjunción ( && ) 
  • Disyunción ( | | ) 
  • Not lógico ( ! ) 
Y por ultimo tenemos los operadores lógicos: 
  • Menor que ( < ) 
  • Mayor que ( > ) 
  • Igual que ( == ) 
  • Menor o igual que ( <= ) 
  • Mayor o igual que ( >= ) 
Tomando en cuenta que la mayoría de estos operadores se utilizan en la vida cotidiana y en los paradigmas de programación, Aunque no en todos. Existen los lenguajes de programación de bajo nivel donde las operadores que se vallan a utilizar son representados en forma de palabras. Tenemos de ejemplo el código ensamblador. 
  • Suma (ADD) 
  • Resta (SUB) 
  • Multiplicación (MUL) 
  • División (DIV) 
Las operaciones no cambian, solo el estilo de programarlas.

Definición de funciones

EL concepto de función tiene su origen en el término latino functĭo. La palabra puede ser utilizada en diversos ámbitos y con distintos significados.

   
    Por otra parte, una función matemática es la correspondencia o relación f de los elementos de un conjunto A con los elementos de un conjunto B. Una función cumple con la condición de existencia (todos los elementos de A están relacionados con los elementos de B) y con la condición de unicidad (cada elemento de A está relacionado con un único elemento de B).

    En la informática, más precisamente en los lenguajes de programación, una función es un tipo de subalgoritmo que describe una secuencia de órdenes. Estas órdenes cumplen con una tarea específica de una aplicación más grande.