Академический Документы
Профессиональный Документы
Культура Документы
DURANGO
PROGRAMACIN LGICA Y FUNCIONAL
EVALUACIN PEREZOSA
ERLANG
ALUMNA:
DORADO BENITEZ FRANCES POULETE
NO. CONTROL:
14040445
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
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
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