lunes, 12 de mayo de 2014

No.4°
Conclusión

Las funciones recursivas se invocan a sí mismas, permitiendo que una operación se realice una y otra vez hasta alcanzar el caso base. La mayoría de los lenguajes de programación funcional de propósito general permiten la recursividad sin restricciones y superan el test de Turing, lo que hace que el programa que se interrumpe no pueda tomar un decisión, lo que puede causar una falta de solidez en el razonamiento ecuacional y generalmente requiere introducir inconsistencia dentro de la lógica expresada por los tipos del sistema del lenguaje. La programación funcional limitada a la recursividad bien construida con unas cuantas restricciones más se llama programación funcional total. La diferencia que se percibe en programa funcional e programa funcional recursividad es que son diferentes tipos  en ambos y todo su procedimiento es diferente.
B) PROGRAMACIÓN FUNCIONAL CON RECURSIVIDAD
Las funciones recursivas se invocan a sí mismas, permitiendo que una operación se realice una y otra vez hasta alcanzar el caso base. Aunque algunas recursividades requieren el mantenimiento de una pila, la recursividad mediante una cola puede ser reconocida y optimizada mediante un compilador dentro del mismo código utilizado, para implementar las iteraciones en un lenguaje imperativo. El estándar del esquema del lenguaje requiere implementaciones para conocer y optimizar la recursividad mediante una cola. La optimización de la recursividad mediante una cola puede ser implementada transformando el programa a un estilo de pase de continuidad durante la compilación, entre otros enfoques.
La mayoría de los lenguajes de programación funcional de propósito general permiten la recursividad sin restricciones y superan el test de Turing, lo que hace que el programa que se interrumpe no pueda tomar un decisión, lo que puede causar una falta de solidez en el razonamiento ecuacional y generalmente requiere introducir inconsistencia dentro de la lógica expresada por los tipos del sistema del lenguaje. Algunos lenguajes de propósito especial como Coq permiten tan sólo recursividad bien fundamentada y tienen una normalización fuerte(cálculos no finalizados pueden ser expresados tan sólo con flujos de valores infinitos llamados codata) En consecuencia, estos lenguajes fallan el test de Turing y declarar funciones ciertas en ellos es imposible, pero pueden declarar una amplia clase de cálculos interesantes mientras evitan los problemas producidos por la recursividad sin restricciones. La programación funcional limitada a la recursividad bien construida con unas cuantas restricciones más se llama programación funcional total.
TÉCNICAS DE PROGRAMACIÓN RECURSIVIDAD
La función matemática factorial se define como el producto de todos los números hasta el argumento inclusive.
Dado que restamos uno de N cada vez y comprobamos si es igual a uno, la función no es infinita y puede completarse correctamente.
sage: def factorial_rec(n):

... '''Devuelve el factorial de un numero, usando llamadas recursivas
... '''
... if n == 0:
... return 1
... else:
... return n*factorial_rec(n-1)
sage: var = factorial_rec(1)
Escribir la función del factorial sin utilizar la recursividad implica el desarrollo de mucho más código. Necesitamos crear una lista de todos los números desde el 1 al N y luego iterar en la lista multiplicando el total actual por el item siguiente. Puedes probar hacerlo como un ejercicio y comparálo con la función definida más arriba.
MODELOS DE EVALUACIÓN
Evaluación es el proceso sistemático de recolección y análisis de datos con la finalidad de determinar si es que, y hasta que punto, unos objetivos han sido o están siendo logrados. La información resultante se pone al servicio de la toma de decisiones.
CLASES DE TIPOS
Listas
Una lista es una colección ordenada de valores. Una lista puede contener cualquier cosa.
En Python, el tipo de datos que representa a las listas se llama list.
Las dos maneras principales de crear una lista son:
  • usar una lista literal, con los valores entre corchetes:
  • usar la función list aplicada sobre un iterable:



Pilas
Es un lenguaje que usa un modelo de máquina de pila para pasar los parámetros. Varios lenguajes de programación entran en esta descripción, notablemente forth ,RPL y PostScript, y también muchos lenguajes ensamblador (pero a un nivel muy inferior).
Los lenguajes de programación orientados a pila operan sobre uno o más pilas que pueden responder a diferentes propósitos. Debido a esto, las construcciones en otros lenguajes de
programación pueden necesitar ser modificadas para el uso en un lenguaje de programación orientado a pila. Sumado a esto, algunos lenguajes de programación orientados a pilas operan en notación polaca inversa (RPN) o notación de postfijo - es decir, los argumentos o parámetros para un cierto comando se indican antes del comando real en sí mismo. Por ejemplo, para multiplicar 2 por 3, en notación polaca inversa uno diría "2, 3, multiplica" en vez de "multiplica, 2, 3" (notación de prefijo o notación polaca) ó "2 multiplica 3" (notación de infijo). 

Árboles
Es una estructura de datos no lineal puesto que cada elemento apunta a uno o varios elementos del mismo tipo; esto es dado un elemento, no hay un único camino a seguir. El elemento que apunta a otro es llamado padre, mientras que el elemento apuntado se conoce como hijo. Todos los elementos tienen un padre  a excepción de la raíz. Puede decirse que un árbol esta formado por subarboles resaltando así su naturaleza recursiva


Cola
Funciones de recursión de cola son funciones que finalizan con una llamada recursiva que no crea ninguna operación deferida. Con un compilador que automáticamente optimiza llamadas recursivas de cola, una función recursiva de cola, como por ejemplo gcd, se ejecutará usando un espacio constante. Así, el proceso que genera es esencialmente iterativo y equivalente a usar estructuras de control de lenguaje imperativo como los bucles for y while. La importancia de recursión de cola es que cuando se realiza una llamada recursiva de cola, la posición de retorno de la función que llama necesita grabarse en el call stack; cuando la función recursiva retorna, continuará directamente a partir de la posición de retorno grabada previamente. Por ello, en compiladores que dan soporte a optimización de recursión de cola, este tipo de recursión ahorra espacio y tiempo.


APLICACIONES DE RUTINAS DE PSEUDOCODIGO
Los objetos en C++ son abstraídos mediante una clase. Según el paradigma de la programación orientada a objetos un objeto consta de:
Identidad, que lo diferencia de otros objetos (Nombre que llevara la clase a la que pertenece dicho objeto).
Métodos o funciones miembro
Atributos o variables miembro 

jueves, 1 de mayo de 2014

R.A.2.1

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 estadounidenseHaskell 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 
Es un lenguaje de programación multi-paradigma diseñado para expresar patrones comunes de programación en forma concisa, elegante y con tipos seguros. Integra sutilmente características de lenguajes funcionales y orientados a objetos. La implementación actual corre en la máquina virtual de Java y es compatible con las aplicaciones Java existentes.

object HolaMundo {
  def main(args: Array[String]) =
    println("Hola mundo")
}

Scheme
Es un lenguaje funcional (si bienimpuro pues sus estructuras de datos no son inmutables) y un dialecto de Lisp. Fue desarrollado por Guy L. Steele y Gerald Jay Sussman en la década de los setenta e introducido en el mundo académico a través de una serie de artículos conocidos como losLambda Papers de Sussman y Steele.
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
Es un lenguaje de programación de propósito general de la familia de loslenguajes de programación funcionaldesarrollado por Robin Milner y otros a finales de los años 1970 en la Universidad de Edimburgo. ML es un acrónimo de Meta Lenguaje dado que fue concebido como el lenguaje para desarrollar tácticas de demostración en el sistema LCF (El lenguaje para el cual ML era meta lenguaje espplambda, una combinación del cálculo de predicados de primer orden y el lambda-cálculo polimórfico sencillamente tipificado).
Erlang 
Es un lenguaje de programación concurrente y un sistema de ejecución que incluye una máquina virtual y biblioteca.2
El subconjunto de programación secuencial de Erlang es un lenguaje funcional, conevaluación estrictaasignación única, y tipado dinámico. Fue diseñado en la compañía Ericsson para realizar aplicaciones distribuidas, tolerantes a fallos, soft-real-timey de funcionamiento ininterrumpido. 
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: