Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TO DO:
- - Pedirle el Ej 2 a Giannini.
- //Ejercicio 1
- -module(pepe).
- -export([init/0]).
- match_test () ->
- {A,B} = {5,4},
- %% Esta linea se rompe porque no puede hacer matchear C a dos valores distintos.
- %%{C,C} = {5,4},
- {B,A} = {4,5},
- {D,D} = {5,5}.
- apellido ({persona, {nombre, _}, {apellido, A}}) -> A.
- nombre ({persona, {nombre, N}, {apellido, _}}) -> N.
- tuple_test (P1,P2) ->
- io:format("El nombre de P1 es ~p y el apellido de P2 es ~p~n",[nombre(P1),apellido(P2)]).
- string_test () -> [
- helloworld == 'helloworld', %% Este es True porque son dos maneras de escribir el mismo atomo.
- "helloworld" < 'helloworld', %% Este es False y no entendemos por que.
- helloworld == "helloworld", %% Este es False porque uno es un atomo y el otro, un string.
- [$h,$e,$l,$l,$o,$w,$o,$r,$l,$d] == "helloworld", %% Este es True porque son dos maneras de escribir el mismo string.
- [104,101,108,108,111,119,111,114,108,100] < {104,101,108,108,111,119,111,114,108,100}, %% Este es False y no entendemos por que.
- [104,101,108,108,111,119,111,114,108,100] > 1, %% Este es True y no entendemos por que.
- [104,101,108,108,111,119,111,114,108,100] == "helloworld"]. %% Este es True porque cada caracter corresponde con su codigo.
- filtrar_por_apellido(Personas,Apellido) -> [nombre(X) || X <- Personas, apellido(X) == Apellido].
- init () ->
- P1 = {persona,{nombre,"Juan"},{apellido, "Gomez"}},
- P2 = {persona,{nombre,"Carlos"},{apellido, "Garcia"}},
- P3 = {persona,{nombre,"Javier"},{apellido, "Garcia"}},
- P4 = {persona,{nombre,"Rolando"},{apellido, "Garcia"}},
- match_test(),
- tuple_test(P1, P2),
- string_test(),
- Garcias = filtrar_por_apellido([P4,P3,P2,P1],"Garcia"),
- io:format("~p ~n~p ~n~p ~n", Garcias),
- io:format("Todo esta bien ~n").
- // Ejercicio 3
- -module(eco).
- -compile(export_all).
- server() ->
- {ok, ListenSocket} = gen_tcp:listen(8000, [{active, false}]),
- wait_connect(ListenSocket, 1).
- wait_connect(ListenSocket, N) ->
- {ok, Socket} = gen_tcp:accept(ListenSocket),
- spawn(?MODULE, wait_connect, [ListenSocket, N+1]),
- get_request(Socket, N).
- get_request(Socket, N) -> {ok, Msg} = gen_tcp:recv(Socket, 0),
- gen_tcp:send(Socket, Msg),
- gen_tcp:close(Socket).
- // Ejercicio 4
- %%Version original
- -module(ej4).
- -compile(export_all).
- -define(N_Procesos, 7).
- -define(N_Inicial, 10).
- proceso(IdHermano) -> receive {id, Pid} -> proceso(Pid);
- {msg, 0} -> IdHermano ! {msg_exit}, io:format("RIP in Process ~p~n", [self()]), ok;
- {msg, N} -> io:format("Soy el proceso ~p y le mando N = ~p al proceso ~p~n",[self(), N - 1, IdHermano]), IdHermano ! {msg, N - 1}, proceso(IdHermano);
- {msg_exit} -> IdHermano ! {msg_exit}, io:format("RIP in Process ~p~n", [self()]), ok end.
- iniciarProcesos(ListaDePids, Actual, Total) when (Actual > Total) -> lists:nth(1, ListaDePids) ! {msg, ?N_Inicial}, ok;
- iniciarProcesos(ListaDePids, Actual, Total) -> lists:nth(Actual, ListaDePids) ! {id, lists:nth( (Actual rem ?N_Procesos) + 1, ListaDePids)}, iniciarProcesos(ListaDePids, Actual + 1, Total).
- init() -> IDs = [spawn(?MODULE, proceso, [0]) || _ <- lists:seq(1, ?N_Procesos, 1)],
- iniciarProcesos(IDs, 1, ?N_Procesos).
- %%Modificación
- -module(ej4).
- -compile(export_all).
- -define(N_Procesos, 50).
- proceso(IdHermano, Repetir) ->
- receive {id, Pid} -> proceso(Pid, Repetir);
- {msg} -> case Repetir of
- true -> io:format("RIP in Process ~p~n", [self()]),
- IdHermano ! {msg_exit},
- ok;
- false -> io:format("Soy el proceso ~p y le mando un mensaje al proceso ~p~n",[self(), IdHermano]),
- IdHermano ! {msg},
- proceso(IdHermano, true)
- end;
- {msg_exit} -> IdHermano ! {msg_exit}, io:format("RIP in Process ~p~n", [self()]), ok end.
- iniciarProcesos(ListaDePids, Actual, Total) when (Actual > Total) -> lists:nth(1, ListaDePids) ! {msg}, ok;
- iniciarProcesos(ListaDePids, Actual, Total) -> lists:nth(Actual, ListaDePids) ! {id, lists:nth( (Actual rem ?N_Procesos) + 1, ListaDePids)}, iniciarProcesos(ListaDePids, Actual + 1, Total).
- init() -> IDs = [spawn(?MODULE, proceso, [0, false]) || _ <- lists:seq(1, ?N_Procesos, 1)],
- iniciarProcesos(IDs, 1, ?N_Procesos).
- //EJERCICIO 6 SUGOIIIII
- -module(ej6).
- %~ -export([testLock/0,testsenpai/0]).
- -compile(export_all).
- %internal
- %~ -export([f/2,waiter/2]).
- %~ -export([waiter_senpai/2,senpai/2]).
- mutex () -> receive {lock, Pid} -> Pid!ok,
- receive {unlock, Pid} -> ok end, mutex();
- {destroyLock, Pid} -> ok end.
- lock (L) -> L!{lock, self()}, receive ok -> ok end.
- unlock (L) -> L!{unlock, self()}, ok.
- createLock () -> spawn(?MODULE, mutex, []).
- destroyLock (L) -> L!{destroyLock, self()}.
- f (L,W) -> lock(L),
- % regioncritica(),
- io:format("uno ~p~n",[self()]),
- io:format("dos ~p~n",[self()]),
- io:format("tre ~p~n",[self()]),
- io:format("cua ~p~n",[self()]),
- unlock(L),
- W!finished.
- waiter (L,0) -> io:format("Destruyendo Lock~n"), destroyLock(L);
- waiter (L,N) -> receive finished -> waiter(L,N-1) end.
- testLock () -> L = createLock(),
- W=spawn(?MODULE,waiter,[L,3]),
- spawn(?MODULE,f,[L,W]),
- spawn(?MODULE,f,[L,W]),
- spawn(?MODULE,f,[L,W]),
- ok.
- %~ #noweeb
- semaphore (N, L) when N>0 ->
- receive {senpaiP, Pid} -> Pid!ok,
- semaphore(N-1, [Pid | L]);
- {senpaiV, Pid2} ->
- case lists:member(Pid2, L) of
- true -> semaphore(N+1, lists:delete(Pid2, L));
- false -> semaphore(N,L)
- end;
- {destroysenpai, Pid3} -> ok end;
- semaphore (N, L) ->
- receive {senpaiV, Pid2} ->
- case lists:member(Pid2, L) of
- true -> semaphore(N+1, lists:delete(Pid2, L));
- false -> semaphore(N,L)
- end;
- {destroysenpai, Pid3} -> ok end.
- createsenpai (N) -> spawn(?MODULE, semaphore, [N, []]).
- destroysenpai (S) -> io:format("S-senpai, I don't feel so good... UwU~n"), S!{destroysenpai, self()}, ok.
- senpaiP (S) -> S!{senpaiP, self()}, receive ok -> ok end.
- senpaiV (S) -> S!{senpaiV, self()}, ok.
- senpai (S,W) ->
- senpaiP(S),
- %regioncritica(), bueno, casi....
- io:format("uno ~p~n",[self()]),
- io:format("dos ~p~n",[self()]),
- io:format("tre ~p~n",[self()]),
- io:format("cua ~p~n",[self()]),
- senpaiV(S),
- W!finished.
- waiter_senpai (S,0) -> destroysenpai(S);
- waiter_senpai (S,N) -> receive finished -> waiter_senpai(S,N-1) end.
- testsenpai () -> S = createsenpai(1), % a lo sumo dos usando io al mismo tiempo
- W=spawn(?MODULE,waiter_senpai,[S,5]),
- spawn(?MODULE,senpai,[S,W]),
- spawn(?MODULE,senpai,[S,W]),
- spawn(?MODULE,senpai,[S,W]),
- spawn(?MODULE,senpai,[S,W]),
- spawn(?MODULE,senpai,[S,W]),
- '=w= s-senpai...'.
- // Ejercicio 7
- -module(ej7).
- -compile(export_all).
- launch() -> process_flag(trap_exit, true),
- H = spawn_link(?MODULE, hello, []),
- receive {'EXIT', _, _} -> launch() end.
- hello() ->
- {A1,A2,A3} = now(),
- random:seed(A1,A2,A3),
- helloloop().
- helloloop() ->
- receive
- after 1000 -> ok
- end,
- io:format("Hello ~p~n",
- [case random:uniform(10) of 10 -> 1/uno; _ -> self() end]),
- helloloop().
- init() -> spawn(?MODULE, launch, []).
- // Ejercicio 8
- -module(ej8).
- -compile(export_all).
- launch() -> process_flag(trap_exit, true),
- H = spawn_link(?MODULE, hello, []),
- receive {'EXIT', _, _} -> launch() end.
- hello() ->
- {A1,A2,A3} = now(),
- random:seed(A1,A2,A3),
- helloloop().
- helloloop() ->
- receive
- after 1000 -> ok
- end,
- io:format("Hellori ~p~n",
- [case random:uniform(10) of 10 -> 1/uno; _ -> self() end]),
- ?MODULE:helloloop().
- init() -> spawn(?MODULE, launch, []).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement