programacion funcional
Programación Funcional
Prof. Teddy Alfaro
4.1 Introducción a la
Programación Funcional
1
Programación Funcional
• Paradigma diferente a los imperativos, que se
aleja de la máquina de von Neumann
• Basado en funciones matemática (notación
funcional lambda de Church)
• No existen realmente arquitecturas de
computadores que permitan la eficiente
ejecución deprogramas funcionales
• LISP es el primero, del cual derivan Scheme,
Common LISP, ML y Haskell
Funciones Matemáticas
• Un función es una proyección de un conjunto
dominio a uno que es el rango
f: D
R
• La evaluación de funciones está controlada por
recursión y condiciones (imperativos lo hacen
normalmente por secuencias e iteraciones)
• Funciones matemáticas entregan siempre el
mismovalor para el mismo conjunto de
argumentos y, por lo tanto, no tiene efectos
laterales.
2
Formas Funcionales
(funciones de orden superior)
Toman funciones como parámetros y/o
producen funciones como resultado
Composición de Funciones
h
f°g
entonces:
h(x)
f(g(x))
Construcción. Lista se funciones que se
aplican
[f, g](x)
produce
(f(x), g(x))
Aplicar a todo.Una función se aplica a lista
arg.
(f, (x, y, z))
produce
(f(x), f(y), f(z))
Fundamentos de la PF
• La PF pura no usa variables ni asignación
• Repetición debe ser lograda con recursión
• Un programa consiste de definición de
funciones y aplicación de éstas
• La ejecución del programa no es nada más que
la evaluación de funciones
• La transparencia referencial se refiere a que laevaluación de una función simpre produce el
mismo resultado
3
Lenguajes Funcionales
• El lenguaje provee algunas funciones básicas,
que son primitivas para construir funciones más
complejas.
• Se definen algunas estructuras para representar
datos en los parámetros y resultados de las
funciones.
• Normalmente se implementan mediante
interpretadores, pero también se puedencompilar.
4.2 Introducción al
Lenguaje Scheme
Sintaxis, listas, operadores
básicos, expresiones lambda y
definición de variables
4
Origen de Scheme
•
•
•
•
Desarrollado en el MIT a mediados del ´70
Es un dialecto de LISP
Usado para enseñanza de programación
Características:
– Pequeño con sintaxis y semántica simple
– Nombres tienen ámbito estático
– Funciones son entitades deprimera clase, y
por lo tanto se tratan como cualquier valor
Sintaxis
• Palabras claves
• Variables
• Datos constantes (e.g. números;
caracteres; strings; vectores, listas y
símbolos citados)
• Formas estructuradas
• Blancos y comentarios (después de ;)
5
Identificadores
• Corresponden a palabras claves, variables y
símbolos, que no son sensible a mayúsculas
• Se forman de:– mayúsculas y minúsculas [´A´ .. ´Z´, ´a´..´z´]
– Dígitos [´0´..´9´]
– Caracteres [? ! . + - * / < = > : $ % ^ & _ ˜ ]
• Identificadores no pueden comenzar con ningún
carácter que comienza un número (i.e. dígito, +,
- y .), excepto casos de identificadores como + y
...
Ejemplo de Identificadores
• X3 y ?$!!!
• Abcd y AbcD
• 8id
Son válidos
Son el mismo
no es válido
6Constantes Básicas
• String: se escribe usan citado doble (“)
– e.g. “Un string es sensible a Mayusculas”
• Un caracter precede de #\
– e.g. #\a
• Un número pueden ser enteros, fraccionarios, punto
flotante y en notación científica
– e.g. -365, 1/4, 23.46, 1.3e27
• Números complejos en coordenadas rectangulares
y polares
– e.g. 2.7-4.5i
+3.4@-0.5
• Booleanos son los valores #f(falso) y #t (verdadero)
Ambiente Interactivo de Scheme
• Corresponde al ciclo: leer, evaluar e imprimir
(denominado REPL).
• El sistema entrega un pronto, se ingresa la
expresión, el sistema evalúa y entrega el
resultado.
Ejemplo:
“Hola Scheme”
=> “Hola Scheme”
(Toda constante evalúa en la misma constante)
• Es posible cargar y salvar en un archivo para
facilitar el proceso de...
Regístrate para leer el documento completo.