ELABORAR RUTINAS EN PSEUDOCODIGO MEDIANTE RECURSIVIDAD PARA SU
APLICACIÓN EL LENGUAJES DE PROGRAMACIÓN FUNCIONAL.
A)Programa funcional
- Concepto
- Características
- Lenguajes funcional
B)Programación funcional con
recursividad
- Sistema de tipos
- Técnicas de programación
recursividad
- Modelos de evaluación
- Clases de tipos
- Aplicaciones de rutina en
pseudocodigo
A)PROGRAMA FUNCIONAL
Es un paradigma de programación declarativa basado
en la utilización de funciones aritméticas que no maneja datos
mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el
estilo de programación imperativa, que enfatiza los cambios de estado. La
programación funcional tiene sus raíces en el cálculo lambda, un sistema
formal desarrollado en los años 1930 para investigar la definición de función,
la aplicación de las funciones y la recursión. Muchos lenguajes de programación
funcionales pueden ser vistos como elaboraciones del cálculo lambda.
LENGUAJES FUNCIONALES
Los lenguajes funcionales se basan en la declaración de
funciones aritméticas, trata de ser un lenguaje expresivo y matemáticamente
elegante.
Los programas escritos en lenguajes funcionales están
compuestos únicamente por la definición de funciones, pero no se trata de
subrutinas de un programa iterativo, sino más bien como funciones puramente
matemáticas.
Los lenguajes funcionales son: Haskell, Miranda, R,
Lisp, Scala, Scheme, ML, Erlang entre otros.
TIPOS
Haskell
Es un
lenguaje de programación estandarizado
multi-propósito puramente
funcional con semánticas no estrictas
y
fuerte tipificación estática. Su nombre se
debe al lógico estadounidense
Haskell Curry.
En Haskell, "una función es un ciudadano de primera clase" del
lenguaje de programación. Como lenguaje de programación funcional, el
constructor de controles primario es la función. El lenguaje tiene sus orígenes
en las observaciones de Haskell Curry y sus descendientes intelectuales.
--Función recursiva para calcular el
factorial de un número
factorial :: (Integral a) => a -> a
factorial 0 = 1
factorial
n = n * factorial (n - 1)
Miranda
La solución a muchos ejemplos de programas resulta más simple
en Miranda que en la mayoría de los lenguajes de programación excepto
quizás
APL,
y como otros lenguajes funcionales, sus usuarios comentan que este les permite
producir programas fiables en un menor período en comparación con el otros
lenguajes de programación usados anteriormente
Por ejemplo:
add a
b = a + b
increment
= add 1
Lenguaje
R
Es un lenguaje para análisis estadístico y gráfico creado
por Ross Ihaka y Robert Gentleaman.
Los análisis gráficos pueden ser visualizados en su propia
ventana, permitiendo ser guardada en varios formatos(pdf, png, etc), mientras
que los resultados de análisis estadísticos los podemos ver en la misma
pantalla.
Lo que yo hice en R es una gráfica con valores al azar:
> x <- rnorm(10)
> y <- rnorm(10)
> plot(x, y)
Lisp
Lisp es un
lenguaje tipo funcional, es el segundo lenguaje de alto nivel más viejo, los
dialectos de Lisp más ampliamente conocidos son el Scheme y Common Lisp.
El nombre Lisp viene de "LISt Processing" (Proceso
de LIStas). Una de las estructuras de datos importante de Lisp son las listas
encadenadas, el código fuente de lisp esta compuesto de listas.
Es un lenguaje útil para desarrollar la inteligencia
artificial.
Para empezar a programar en Lisp lo primero que hice fué
instalar clisp:
Scala
object HolaMundo {
def main(args: Array[String]) =
println("Hola mundo")
}
Scheme
La expresión let con nombre y la sentencia do son
azúcar sintáctica que simplifica las
definiciones con recursión final.
(define (factorial n)
(let loop ((fact 1)
(n n))
(cond ((= n 0) fact)
(else (loop (* n fact) (- n 1))))))
(factorial 5)
;; => 120
(define (map f lst)
(do ((lst lst (cdr lst))
(res '() (cons (f (car lst)) res)))
((null? lst) (reverse res))))
(map (lambda (x) (* x x)) '(1 2 3 4))
;; => (1 4 9 16)
ML
Erlang
Ejemplos:
Pid = spawn(Mod, Func, Args) % ejecutar la función Func como un nuevo proceso
Pid = spawn(Node, Mod, Func, Args) % ejecutar la función Func en un nodo remoto
Pid ! a_message % enviar un mensaje al proceso (asíncronamente)
receive % recibir el mensaje enviado a este proceso
a_message -> do_something
end.
ACTICIDAD
1.
En base ala investigación
Realice un cuadro sinóptico sobre programación funcional y sus generales, un mapa
conceptual sobre los tipos de lenguaje de programación funcional considerando
las características, mencione la decencias que cree usted que tiene a programación
funcional con el tipo de programación que se a iniciado.
CUADRO SINÓPTICO:
MAPA CONCEPTUAL: