-module(l). -export([loop/1, rev/1, length/1, times/3, start_pong/1, pong/1, r/0, start_pong2/1, start_pong3/0, pong/0, version/0 ]). %%%%%%%%% Sum it up %%%%%%%%%%%%%%%%%%% loop(X) -> loop(X, 0). loop(_X=0, Sum) -> Sum; loop(X, Sum) -> loop(X-1, Sum+X). %%%%%%%%% Reverse a list %%%%%%%%%%%%%% rev(L) -> rev(L, []). rev([], N) -> N; rev([H|T], N) -> rev(T, [H] ++ N). %%%%%%%%%% Length of a list %%%%%%%%%%% length(L) -> length(L, 0). length([], N) -> N; length([_H|T], N) -> length(T, N+1). %%%%%%%%%% Run Fun X tmes %%%%%%%%%%%% times(_F, _Args, 0) -> ok; times(F, Args, X) -> F(Args), times(F, Args, X-1). %%%%%%%%%% Echo message sent %%%%%%%%% start_pong(Pid) -> spawn(l, pong, [Pid]). pong(Pid) -> receive giveup -> io:format("Pong finished~n", []); {ping, Msg} -> io:format("pong: Received ping '~s'~n", [Msg]), Pid ! {pong, Msg}, pong(Pid); Msg -> io:format("Unknwown message ~p, giving up", [Msg]), exit(reason) end. r() -> receive X -> X end. %%%%%%%%% Linked ping %%%%%%%%%%%%%%% start_pong2(Pid) -> P = spawn(l, pong, [Pid]), link(P), P. %%%%%%%%% Distributed ping %%%%%%%%%% start_pong3() -> P = spawn(l, pong, []), register(pong, P), P. pong() -> receive giveup -> io:format("Pong finished~n", []); {ping, Msg, Pid} -> io:format("ping: Received ping '~s' from '~p~n", [Msg, Pid]), Pid ! {pong, Msg}, pong(); Msg -> io:format("Unknwown message ~p, giving up", [Msg]), exit(reason) end. %%%%%%%%% Code replacement %%%%%%%%%%%%%%% version() -> io:format("This is version 1").