For telephone systems
Erlang/OTP
f(x) = y
i = i + 3
i = i + 3
for (int i=0; i < 3; i++) do_something(i);
for (int i=0; i < 3; i++) do_something(i);
1> A=3.
3
2> A=4.
** exception error: no match of right hand side value 4
loop(X) -> loop(X, 0).
loop(X=0, Sum) -> Sum;
loop(X, Sum) -> loop(X-1, Sum+X).
loop(3) -> loop(3, 0)
loop(3,0) -> loop(3-1, 0+3)
loop(2,3) -> loop(2-1, 3+2)
loop(1,5) -> loop(1-1, 5+1)
loop(0,6) -> 6
3 + 2 + 1 = 6
A = [this, is, a, list].
[H|T] = A.
rev(L) -> rev(L, []).
rev([], N) -> N;
rev([H|T], N) -> rev(T, [H] ++ N).
rev([a,b,c,d]) -> rev([a,b,c,d], [])
rev([a|[b,c,d]], []) -> rev([b,c,d], [a] ++ [])
rev([b|[c,d]], [a]) -> rev([c,d], [b] ++ [a])
rev([c|[d]], [b,a]) -> rev([d], [c] ++ [b,a])
rev([d|[], [c,b,a]) -> rev([], [d] ++ [c,b,a])
rev([], [d,c,b,a]) -> [d,c,b,a]
A = {this, is, a, tuple}.
{_, _, _, B} = A.
> B.
tuple
> _.
* 1: variable '_' is unbound
F = fun (X) -> X*X end.
> F(3).
> F(ok).
> F(3).
9
> F(ok).
** exception error: an error occurred when evaluating an arithmetic expression
in operator */2
called as ok * ok
Dialyzer
-spec foobar(atom()) -> [atom()].
foobar(App) -> …
F = fun(X) -> io:format("~p~n", [X]) end.
times(X, Args, C) -> ...
spawn(l, times, [F, "I'm a process", 3]).
spawn(l, times, [F, "I'm a process", 3]),
spawn(l, times, [F, "I'm a process too", 3]).
"I'm a process"
"I'm a process too"
"I'm a process"
"I'm a process too"
<0.53.0>
"I'm a process"
"I'm a process too"
start_pong(Pid) -> …
pong(Pid) -> …
> P = l:start_pong(self()).
> P ! { ping, "foo" }.
> P ! giveup.
> R = fun () -> receive M -> M end end.
> R().
{pong,"hallo1"}
> R().
{pong,"hallo2"}
2> P ! {ping, 3}.
{ping,3}
3>
=ERROR REPORT==== 8-May-2016::15:13:30 ===
Error in process <0.34.0> with exit value:
{badarg,[{io,format,[<0.25.0>,"pong: Received ping '~s'~n",[3]],[]},
{l,pong,1,[{file,"l.erl"},{line,57}]}]}
2> P ! whatever
Unknwown message asfasdf, giving up
> process_flag(trap_exit, true).
> P = l:start_pong2(self()).
3> P ! sadfsadf.
Unknwown message sadfsadf, giving upsadfsadf
4> receive X -> X end.
{'EXIT',<0.35.0>,reason}
$ erl -sname ping
$ erl -sname pong
register(spawn(...))
On pong
> P = l:start_pong3().
On ping
> {pong, pong@bogon} ! {ping, "hello", self()}.
> {pong, pong@bogon} ! {ping, "hello", self()}.
> receive X -> X end.
{pong,"hello"}
erlang:node().
erlang:nodes().
version() -> …
c(l).
Open Telecommunication Platform
erl -sname observer -hidden -run observer
dbg:start().
dbg:tracer().
% trace messages (m)
dbg:p(pong, m).
Native Implemented Functions