Programación funcional

8
rogramación Funcional Paradigmas y Lenguajes de Programación. Rotta, Damián 2013

description

 

Transcript of Programación funcional

Page 1: Programación funcional

Programación Funcional

Paradigmas y Lenguajes de Programación. Rotta, Damián 2013

Page 2: Programación funcional

Características

Un programa se considera como una función matemática.

f:X → Y ó y = f(x)Programa : Input -> Output ó output = Programa(input)

No existen variables, sólo existen constantes, parámetros y valores.

La asignación no es una instrucción permitida. No existen los ciclos al estilo de los lenguajes tradicionales. Un lenguaje funcional puede lograr esto mediante la recursión.

Page 3: Programación funcional

Diferencias con las matemáticas

Las variables siempre se refieren a un valor y no a una localización de memoria.

Ej: x=x+1

Esa es la razón por la cual decíamos que el concepto de variable se elimina y la asignación no es una instrucción permitida.

Page 4: Programación funcional

Consecuencias de la ausencia de variables

El valor de cualquier función depende solamente de los valores de sus parámetros y no de llamados previos.

El valor de cualquier función no depende del orden de evaluación de sus parámetros: transparencia referencial.

El ambiente de ejecución asocia valores con nombres, no con localizaciones de memoria; una vez que un nombre entra al ambiente, su valor no cambia.

Page 5: Programación funcional

Lenguajes

Page 6: Programación funcional

OCamlDesarrollado desde 1992 con base en sus predecesor Caml Special Light y Caml Light. De la familia ML creada por Robert Milner en 1975.

Fuertemente tipado.Además de tipos básicos permite construir tuplas, arreglos, listas, registros, conjuntos y streams.

No existen errores de punteros, de mal manejo de memoria, de asignaciones invalidas, de vectores fuera de rango, etc. 

Posee un recolector de basura que permite en muchos casos desentenderse del manejo de memoria dinámica.

Page 7: Programación funcional

Comparación (Factorial de un número)

C:#include <stdio.h>int main() {int c, n, fact = 1; scanf("%d", &n); for (c = 1; c <= n; c++) fact = fact * c; printf("Factorial de%d = %d\n", n, fact);

Prolog:factorial(0, 1). factorial(1, 1).factorial(N, F) :- N>0, N1 is N - 1, factorial(N1, F1), F is N * F1.

Page 8: Programación funcional

Ocaml:# let rec fact x = if x <= 1 then 1 else x * fact (x - 1);;

Java:import java.util.Scanner; public class Factorial {  public static void main(String[] args){ 

Scanner s =new Scanner(System.in); int suma=1; System.out.println("Ingrese un numero"); int n=s.nextInt(); for(int i=n;i>1;i--){

suma=suma*i;  System.out.println("El factorial de "+n+" es

"+suma);  } 

}