

Programación Logica y Funcional
UNIDAD I CONCEPTOS FUNDAMENTALES
1.1 ESTILOS 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. Por ejemplo el estilo del lenguaje de programación C variará con respecto al del lenguaje BASIC.
Estilo K&R es el más 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 línea para las llaves, e identificar el código debajo de ellas.
Estilo BSD KNF también conocido como estilo Kernel Normal From, es la manera más usada para el código de la distribució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.
1.2 EVALUACION 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. Ejemplos de expresiones:
a + 5*b
(a >= 0) and ((b+5) > 10)
a
-a * 2 + b
-b + sqrt(b**2 - 4*a*c)
length(s) > 0
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
Dentro de las expresiones distinguimos dos clases según el tipo de datos que devuelven al evaluarlas:
Aritméticas: las que devuelven un valor numérico
Lógicas: las que devuelven true o false
Las expresiones se utilizan fundamentalmente en las asignaciones y en las partes condicionales de las sentencias if, while y repeat.
1.3 DEFINICIÓN DE FUNCIONES
Un programa en lenguaje funcional consiste en definir expresiones que computan (o denotan) valores. Así como los valores, en el mundo “real” o
“matemático”, pertenecen a un conjunto, las expresiones pertenecen a un tipo.
Expresiones de Haskell:
Tipos básicos como: Int, Char, Bool, etc.
Funciones, como: a → Int, Bool → (Bool →Bool), etc.
Tuplas de cualquier longitud.
Por ejemplo, (2 ∗ 5 +1, 4 >0) es de tipo(Int, Bool).
Listas: secuencias ordenadas de elementos de un mismo tipo, con repeticiones. [Int] representa el tipo lista de enteros, [Bool] es una lista de booleanos, etc. Las expresiones de tipo lista se construyen con [] (que representa la lista vacía) y: (a: as es la lista que empieza con el elemento a y sigue con la lista as). También pueden escribirse entre corchetes, con los elementos separados por comas:
[]::[Bool]
[3]:: [Int]
’a’: (’b’ : (’c’ : [])) :: [Char]
[2 > 0, False, ’a’ == ’b’]:: [Bool]
[[], [1], [1,2]] :: [[Int]]
El tipo String es sinónimo de [Char], y las listas de este tipo se pueden escribir entre comillas: "plp" es lo mismo que [’p’, ’l’, ’p’].
Tipos definidos por el usuario, con la cláusula data. Los valores asociados a estos tipos consisten de un constructor (que se escribe con mayúscula) acompañado de 0 o más argumentos.
dataDía = Lunes | Martes | Miércoles | Jueves | Viernes
1.4 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.
1.5 TIPOS DE DATOS
Bool (booleano)
El tipo de dato “Bool”, es el tipo de dato lógico, es decir, solo almacena dos posibles valores, cierto y falso
Char (carácter)
Este tipo de dato almacena un solo carácteralfanumérico, es decir del 0 al 9 y de la A a la Z, al igual que en la mayoría de los lenguajes los valores de tipo carácter deben encerrase entre comillas sencillas, por ejemplo: ‘a’ ‘9’
String (cadena de caracteres)
Este tipo de dato almacena una secuencia de caracteres, al igual que en otros lenguajes, los valores para este tipo de dato se deben encerrar entre comillas dobles, por ejemplo: “pedro” “GATO”
Int (enteros de precisión fija)
Se usa para manejar números enteros con un valor de 2 elevado a la 32.
Integer (enteros de precisión arbitraria)
Se usa para almacenar números mayores al tipo Int, pero desgraciadamente no todas las arquitecturas de hardware son capaces de manejarlo.
Float (reales de simple precisión)
Se emplea para manejar valores con decimales, como: 2.5 o 0.0003.

