Programación funcional
-
Upload
damian-rotta -
Category
Software
-
view
152 -
download
5
Embed Size (px)
description
Transcript of Programación funcional

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

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.

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.

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.

Lenguajes

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.

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.

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); }
}