Вы находитесь на странице: 1из 15

INSTITUTO TECNOLGICO DE

DURANGO
PROGRAMACIN LGICA Y FUNCIONAL

EVALUACIN PEREZOSA

ERLANG
ALUMNA:
DORADO BENITEZ FRANCES POULETE
NO. CONTROL:
14040445
EVALUACIN PEREZOSA

Con la evaluacin perezosa se calcula una expresin (parcial) solamente si


realmente se necesita el valor para calcular el resultado.
La evaluacin perezosa es una estrategia de evaluacin que retrasa el
clculo de una expresin hasta que su valor sea necesario, tambin
puede mejorar la velocidad del problema, mientras que puede reducir la
velocidad por un factor constante, sin embargo puede producir prdidas
de memoria si se usa de manera incorrecta.
EVALUACIN PEREZOSA

En el modelo de evaluacin del lenguaje funcional de ERLANG, el usuario


introduce una expresin que es evaluada por el sistema.
La evaluacin consiste en buscar subexpresiones dentro de la expresin
que puedan transformarse utilizando las funciones predefinidas y las
funciones definidas por el usuario.
EVALUACIN PEREZOSA

EJEMPLO.
Si en un momento dado queremos -module(infinitos).
trabajar con una lista de infinitos
trminos, o incluso con un -compile([export_all]).
contenido que no queremos que
est siempre presente, sino que enteros(Desde) -> 0 , X
se vaya generando a medida que fun() -> Start
se necesita, podemos realizar una
end.
clausura que haga algo como lo
siguiente..
EVALUACIN PEREZOSA

ERLANG tiene un tipo de datos de lista que se evala perezosamente .


Es decir, los elementos de la lista solo se evalan si se necesitan para
continuar el clculo.
Esto le permite hacer todo tipo de cosas interesantes, como crear una
lista infinita de enteros o crear una lista que se refiera a s misma.
EVALUACIN PEREZOSA

Cuando se piensa en programacin funcional de forma perezosa, normalmente, se


piensa en las listas de comprensin y en funciones sobre listas como son map,
filter,range o fold.
Estas funciones realizan un tratamiento de datos como podra hacerlo un bucle en
los lenguajes imperativos.
En realidad termina siendo ms potente ya que, debido a su naturaleza, se puede
paralelizar.
A travs del uso de clausuras, podemos hacer que se aplique un cdigo especfico a
cada elemento de una lista de elementos.
EVALUACIN PEREZOSA
Veamos la lista de funciones ms importantes de este tipo que provee
ERLANG
r = range(10)
EJEMPLO.
print(r)
RANGE mtodo en ERLANG sigue range(0, 10)
el concepto de la evaluacin
perezosa la cual crea una lista de print(r[4])
nmeros enteros en sucesin Se producir la siguiente salida
aritmtica
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Se ahorra el tiempo de ejecucin 3
para las gamas ms grandes y
nunca requiere de todos los
valores a la vez, por lo que ahorra
el consumo de memoria tambin.
EVALUACIN PEREZOSA
Veamos la lista de funciones ms importantes de este tipo que provee
ERLANG

EJEMPLO.
any/2 > L = [1,2,3,4].
Evala cada elemento con la > lists:any(fun(X) ->
clausura pasada como parmetro, if > X > 2 -> true;
debiendo retornar sta true o > true -> false
false. > end
Si alguno de los elementos > end, L). true
retorna true, la funcin any/2
retorna true.
EVALUACIN PEREZOSA
Veamos la lista de funciones ms importantes de este tipo que provee
ERLANG

EJEMPLO.
> L = [1,2,3,4].
all/2 > lists:all(fun(X) ->
Igual que la anterior, con la > if
salvedad de que todos los > X > 2 -> true;
elementos evaluados deben > true -> false
retornar true.
> end
En el momento en el que uno > end, L).
retorne false, la funcin all/2 false
retornara false.
EVALUACIN PEREZOSA
Veamos la lista de funciones ms importantes de este tipo que provee
ERLANG

EJEMPLO.
> L = [1,2,3,4].
foreach/2 > lists:foreach(fun(X) ->
Aplica la ejecucin de la clausura io:format("~p~n", [X]) end, L).
a cada elemento de la lista. 1
En principio es igual que map/2, 2
salvo que foreach/2 no guarda el 3
retorno de las clausuras que 4
ejecuta ni lo retorna. ok
EVALUACIN PEREZOSA
Veamos la lista de funciones ms importantes de este tipo que provee
ERLANG

EJEMPLO.
foldl/3 - foldr/3
Esta funcin se encarga de ejecutar la clausura pasando como parmetro el
elemento de la lista y el retorno de la ejecucin anterior.
Es como si encadenase la ejecucin de las clausuras, que forzosamente deben
aceptar los dos parmetros.
EVALUACIN PEREZOSA
Veamos la lista de funciones ms importantes de este tipo que provee
ERLANG

EJEMPLO.
> L = [1,2,3,4],
foldl/3 - foldr/3
> F = fun(X, Factorial) -> Factorial
(l o r) indica desde donde se inicia la toma de
elementos de la lista. * X end,
Left o izquierda sera desde la cabeza hasta la
> lists:foldl(F, 1, L).
cola, y right o derecha empezara a tomar 24
elementos por el final de la lista hasta el
principio.
A la funcin se le pasan tres parmetros, el
primero es la clausura, el segundo el valor inicial
y el tercero la lista a procesar:
EVALUACIN PEREZOSA
Veamos la lista de funciones ms importantes de este tipo que provee
ERLANG

EJEMPLO.
> L = [1,2,3,4],
filter/2. > F = fun(X) -> if X > 2 -> true; true
El filtrado toma la lista inicial y ejecuta la -> false end end,
clausura para cada elemento. > lists:filter(F, L).
La clausura debe retornar verdadero o [3,4]
falso (true o false).
Cada elemento que cumpla con la
clausura ser agregado a la lista del
resultado de filter/2.
EVALUACIN PEREZOSA

Estas son las principales funciones que pertenecen al mdulo lists, en su


evaluacin perezosa, del lenguaje ERLANG.
Solo para recordar, con estas :
NO se evala ningn elemento en ninguna funcin hasta que no sea necesario.
Las listas se almacenan internamente en un formato no evaluado.
LA EVALUACIN PEREZOSA CONSISTE EN UTILIZAR PASO POR NOMBRE Y
RECORDAR LOS VALORES DE LOS ARGUMENTOS YA CALCULADOS PARA EVITAR
RECALCULARLOS.
EVALUACIN PEREZOSA

Obtenido de:
https://www.erlang.org/
https://books.google.com.mx/books?id=K_sNBAAAQBAJ&pg=PA55&lpg=PA55
&dq=evaluacion+perezosa+erlang&source=bl&ots=XSP_YOnYb5&sig=3GvpFlF
CSSyscpuLf7TkU04gqbk&hl=es&sa=X&ved=0ahUKEwjT-
ayaupzXAhVH7yYKHQu1AdsQ6AEILDAB#v=onepage&q=evaluacion%20perezos
a%20erlang&f=false
https://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-10.html
http://www.w3ii.com/es/functional_programming/functional_programming_laz
y_evaluation.html

Вам также может понравиться