Alumno:
Joan Richard Perez Jarquin
1.1 Estilos de programación
ESTILOS DE PROGRAMACIÓN.
1.2.4 Funciones………………………………………………………….7
1.1. Diferentes Estilos de programación:
ESTILO O MODELO
1.2. Analizando diferentes de estilos de programación:
1.2.1 Evaluación de expresiones:
EVALUACIÓN DE EXPRESIONES
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.
Orden de operadores:
Reducción de expresiones
ORDEN APLICATIVO
Se reduce siempre el término MAS INTERNO (el más anidado en la expresión). En caso de que
existan varios términos a reducir (con la misma profundidad) se selecciona el que aparece más a la
izquierda de la expresión. Esto también se llama “paso de parámetros por valor” , ya que ante una
aplicación de una función, se reducen primero los parámetros de la función.
ORDEN NORMAL
Consiste en seleccionar el término MÁS EXTERNO (el menos anidado), y en caso de conflicto el que
aparezca más a la izquierda de la expresión. Esta estrategia se conoce como “paso de parámetro
por nombre o referencia”, ya que se pasan como parámetros de las funciones expresiones en vez
de valores.
No se evalúa ningún elemento en ninguna función hasta que no sea necesario Las listas se
almacenan internamente en un formato no evaluado La evaluación perezosa consiste en utilizar
paso por nombre y recordar los valores de los argumentos ya calculados para evitar recalcularlos.
También se denomina estrategia de pasos de parámetros por necesidad. Con una estrategia no
estricta de la expresión doble (doble 3), la expresión (3 + 3) se calcula dos veces.
1.2.2 Tipos de Datos:
Tipos de Datos En lenguajes de programación un tipo de dato es un atributo de una parte de los
datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va
a procesar.
Los lenguajes funcionales, en particular Haskell, tienen un rico conjunto de datos atómicos
predefinidos, tales como los numéricos int, integer (de mayor precisión que el anterior), float,
double, etc., y además los tipos char y bool.
El sistema de tipos de Haskell es uno de los más sofisticados que existen. Es un sistema
polimórfico, que permite una gran flexibilidad de programación, pero a la vez mantiene la
correctitud de los programas. Contrariamente a la mayoría de los lenguajes de programación
procedimentales actuales, Haskell utiliza un sistema de inferencias de tipos, es decir sabe el tipo
resultante de una expresión, por lo que las anotaciones de tipo en un programa son opcionales.
La parte más interesante de Haskell en relación con los tipos son los constructores, las tuplas y las
listas. Una tupla es un dato compuesto donde el tipo de cada componente puede ser distinto. Una
de las utilidades de este tipo de datos es cuando una función tiene que devolver más de un valor:
predSuc x = (x-1,x+1)
Las listas son colecciones de cero o más elementos de un mismo tipo (a diferencia de las tuplas
que pueden tenerlos de diferentes). Los operadores utilizados son el [] y (:). El primero representa
una lista vacía, y el segundo denominado cons o constructor, permite añadir un elemento al
principio de una lista, construyendo la lista en función de agregar elementos a la misma, por
ejemplo.
4 : 2 : 3 : []
da lugar a la lista [4, 2, 3]. Su asociatividad es hacia la derecha. Un tipo particular de lista son las
cadenas de caracteres.
Para terminar diremos que el constructor utilizado para declarar el tipo correspondiente a las
distintas funciones es el símbolo →.
Tipos de Datos en Hakell
Tipos de datos en C#
int a =1;
Double num=3.12;....
1.2.3 Disciplina de tipos:
DISCIPLINA DE TIPOS
En los lenguajes de programación con disciplina de tipos, cada tipo representa una colección de
valores (datos) similares. Una función cuyo tipo sea A1 ->… An -> R espera n parámetros con tipos
A1,…. An y devuelve un resultado de tipo R. El conocer los tipos de las funciones ayuda a
documentar los programas y a evitar errores en tiempo de ejecución.
Haskell y otros lenguajes funcionales utilizan el sistema de tipos de Milner, que tiene dos
características fundamentales:
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.
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.
1.2.4 Definición de funciones:
DEFINICIÓN DE FUNCIONES.
Una función es una aplicación que toma uno o más argumentos y devuelve un valor.
Es una correspondencia en la que cada elemento del dominio está relacionado con un único
elemento de la imagen.
doble x = x * x
• Notación Haskell: f a b + c * d
• Notación Haskell: f x (g y)
Los nombres de funciones tienen que empezar por una letra en minúscula.
En Haskell la disposición del texto del programa (el sangrado) delimita las definiciones mediante la
siguiente regla:
· Una definición acaba con el primer trozo de código con un margen izquierdo menor o igual
que el del comienzo de la definición actual.
cuadrado x = x*x
pi = 3.1415926535
e = exp 1.0
• El nombre de la función
• El símbolo =
• una expresión, que puede contener los parámetros, las funciones estándar y otras funciones
definidas.
Una función que tiene un valor booleano como resultado, tiene a la derecha del símbolo = una
expresión con un valor booleano:
negativo x = x < 0
positivo x = x > 0
esCero x = x == 0
Note la diferencia en el anterior ejemplo entre = y ==. El símbolo = separa la parte izquierda de la
parte derecha de la definición. El símbolo == es un operador, como < y >.