Você está na página 1de 7

Instituto Tecnolgico de Tijuana

Subdireccin Acadmica
Departamento de Sistemas y Computacin

Agosto - Diciembre 2014

Ingeniera en Sistemas Computacionales

Programacin Lgica y Funcional


9SC8B
Lic. Luis Alfonso Gaxiola Vega
Tcnicas de programacin funcional para funciones especficas

Gonzlez Reyes Rebeca Abigail 11210311


Lpez Barajas Jess Manuel 11210348
Hiplito Jacquez Erick
Romero Barrn Jess Enrique 11210300

Tijuana, Baja California, octubre del 2014.

CONTENIDO
Introduccin ....................................................................................................................................................... 2
Objetivos ............................................................................................................................................................ 2
Ventajas y Desventajas ....................................................................................................................................... 2
Ventajas .......................................................................................................................................................... 2
Desventajas ..................................................................................................................................................... 2
Marco Terico .................................................................................................................................................... 3
Funciones Simples .......................................................................................................................................... 3
Formas Funcionales (funciones de mayor orden) ........................................................................................... 3
Composicin ............................................................................................................................................... 3
Construccin ............................................................................................................................................... 4
Aplicar a todo ............................................................................................................................................. 4
Evaluacin Recursiva ..................................................................................................................................... 4
Evaluacin Perezosa ....................................................................................................................................... 4
Estrategias de programacin perezosa ........................................................................................................ 5
Conclusiones ...................................................................................................................................................... 5
Bibliografa......................................................................................................................................................... 5

INTRODUCCIN
Una Estrategia de evaluacin es un conjunto de reglas para evaluar expresiones en un
lenguaje de programacin.
Una estrategia de evaluacin define cundo y en qu orden se evalan los argumentos a una
funcin, cuando est sustituido en la funcin, y lo que la forma de reemplazo.
OBJETIVOS
El paradigma de la programacin funcional es uno de los fundamental entre la llamada
programacin declarativa. Como tal, le permite reunir a los componentes de la
especificacin y la programacin de las tareas de solucin automtica de problemas. Los
lenguajes funcionales ofrecen al desarrollador un buen nmero de recursos expresivos que
permitan resolver problemas complejos a travs de programas pequeos y robustos.
Los lenguajes funcionales ofrecen al desarrollador un buen nmero de recursos expresivos
que pueden ser utilizados para resolver problemas complejos a travs de pequeos
programas y robusto.
Un sistema de tipo polimrfico que permite definir una amplia variedad de
estructuras de datos para su uso genrico.
La capacidad de definir funciones que aceptan otras funciones como argumentos y
devolver funciones como resultado
Instalaciones para definir y manipular estructuras de datos infinitas.
Un simple modelo computacional, clara y bien fundada
VENTAJAS Y DESVENTAJAS
VENTAJAS

Ausencia de efectos secundarios


Proceso de purificacin menos problemtico
Pruebas de unidades ms fiables
Ms fcil ejecucin concurrente

DESVENTAJAS
La principal es que es tardado (o perezoso). Muchos de los problemas del mundo
real requieren una evaluacin rigurosa.
Quedarse corto en la portabilidad, las riquezas de las bibliotecas, los interfaces con
otros lenguajes y herramientas de depuracin

MARCO TERICO
FUNCIONES SIMPLES
Las funciones puramente funcionales (o expresiones) no tienen efectos secundarios
(memoria o E/S). Esto significa que las funciones puras tienen varias propiedades tiles,
muchas de las cuales pueden ser utilizados para optimizar el cdigo:

Si no se utiliza el resultado de una expresin pura, se puede eliminar sin afectar a


otras expresiones.
Si una funcin pura se llama con parmetros que no causan efectos secundarios, el
resultado es constante con respecto a la lista de parmetros (a veces llamada
transparencia referencial), es decir, si la funcin pura se llama de nuevo con los
mismos parmetros, el mismo resultado ser devuelto (esto puede habilitar las
optimizaciones de almacenamiento en cach).
Si no hay una dependencia de datos entre dos expresiones puras, entonces su orden
puede ser invertido, o pueden llevarse a cabo en paralelo y que no pueda interferir
con los otros.
Si el lenguaje no permite efectos secundarios, entonces cualquier estrategia de
evaluacin se puede utilizar, lo que da la libertad al compilador para reordenar o
combinar la evaluacin de expresiones en un programa (por ejemplo, usando la
poda).

La mayora de los compiladores de lenguajes imperativos detectan funciones puras


automticamente y realizan la eliminacin de subexpresiones comunes. Sin embargo no
siempre es posible detectarlo en bibliotecas pre-compiladas, porque por norma general no
dan esta informacin. Esto provoca que no se puedan realizar optimizaciones que podran
aplicar a dichas funciones externas. Algunos compiladores, como gcc, s que aaden
palabras claves adicionales para que el programador marque explcitamente como puras
aquellas funciones externas que procedan, de modo que se le apliquen las optimizaciones
pertinentes.
Ejemplo: cubo(x) = x * x * x
x representa cualquier valor del dominio, pero esta fijo en un elemento especfico durante la
evaluacin. Durante la evaluacin, cada aparicin de un parmetro est ligada a un valor y
es considerada constante.
FORMAS FUNCIONALES (FUNCIONES DE MAYOR ORDEN)
Reciben funciones como parmetros, o entregan funciones como resultado, Por ejemplo:
COMPOSICIN

(f o g)(x) = f(g(x))
CONSTRUCCIN

[g,h,i](x) = (g(x),h(x),i(x))
APLICAR A TODO

(j,(x,y,z)) = (j(x),j(y),j(z))
EVALUACIN RECURSIVA
Una funcin recursiva es aquella que contiene en el bloque de instrucciones que la definen
una llamada a la propia funcin. En matemticas tambin se usan definiciones recursivas y,
tanto en un caso como en otro, hay que tener cuidado para estar seguro de que la definicin
es consistente:
1. La funcin debe poder calcularse directamente en uno o ms de los posibles casos
de uso. Estos casos se llaman casos base.
2. La llamada a la funcin con unos argumentos que no son casos base debe depender
del valor de la funcin en otros argumentos distintos, que deben estar ms cercanos
a los casos base en algn sentido. Esta regla no es muy precisa, pero no se puede dar
una receta general, como veremos.
Como ejemplo, escribimos una implementacin recursiva de la funcin factorial, que se
basa en la definicin recursiva:

0!=1
n!=n*(n-1)! si n>0

EVALUACIN PEREZOSA
En la teora de lenguajes de programacin, La evaluacin perezosa (del ingls lazy
evaluation) o llamada por necesidad es una estrategia de evaluacin que retrasa el clculo
de una expresin hasta que su valor sea necesario, y que tambin evita repetir la evaluacin
en caso de ser necesaria en posteriores ocasiones. Esta comparticin del clculo puede
reducir el tiempo de ejecucin de ciertas funciones de forma exponencial, comparado con
otros tipos de evaluacin.
Los beneficios de la evaluacin perezosa son:

El incremento en el rendimiento al evitar clculos innecesarios, y en tratar


condiciones de error al evaluar expresiones compuestas.
La capacidad de construir estructuras de datos potencialmente infinitas.

La capacidad de definir estructuras de control como abstracciones, en lugar de


operaciones primitivas.

La evaluacin perezosa puede tambin reducir el consumo de memoria de una aplicacin,


ya que los valores se crean solo cuando se necesitan. Sin embargo, es difcil de combinar
con las operaciones tpicas de programacin imperativa, como el manejo de excepciones o
las operaciones de entrada/salida, porque el orden de las operaciones puede quedar
indeterminado. Adems, la evaluacin perezosa puede conducir a fragmentar la memoria.
Lo contrario de la evaluacin perezosa sera la evaluacin acaparadora, o evaluacin
estricta, que es el modo de evaluacin por defecto en la mayora de los lenguajes de
programacin.
ESTRATEGIAS DE PROGRAMACIN PEREZOSA
Para los ejemplos se considera la funcin

Mult:: (Int,Int) Int


Mult (x,y) = x*y

Evaluacin mediante pas de parmetros por valor (o por ms internos):

Mult (1+2,2+3)
= mult (3,5) [por def. de +]
= 3*5 [por def. de mult]
=15 [por def. de *]

Evaluacin mediante el paso de parmetros por nombre (o por ms externos):

Mult (1+2,2+3)
= (1+2)*(3+5) [por def.de mult]
=3*5 [por def. de +]

CONCLUSIONES
Learning new languages , especially in paradigms with which we are less familiar can
teach us a lot about programming in general. This learning process will make us better
programmers, and many of these lessons are applicable to all languages we know , not only
to end up similar languages to learn. In particular , functional languages are sufficiently
similar to accessible and more popular as many useful lessons to teach languages.
BIBLIOGRAFA
[1] http://prezi.com/fngyi7h8u570/evaluacion-perezosa/

[2] http://prezi.com/lhnyd5gqlj_-/unidad-3-evaliacion-perezosa/
[3] https://www.uam.es/personal_pdi/ciencias/pangulo/doc/laboratorio/b1s3.html
[4] http://di002.edv.uniovi.es/~labra/FTP/PLF/pf.pdf
[5] http://csrg.inf.utfsm.cl/~rbonvall/lp/docs/funcional-diapos.pdf
[6] http://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional

Você também pode gostar