Informatika gyűjtemény

Egy szinttel feljebb hello.erl

2004050607080910

NézetNyomtat

hello.erl (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 2 KB
% http://prog.berzsenyi.hu:8080/prog/View/szakkor/bdg/0910/29ora
% A 2010.06.01.-i BDG prog.szakkörön elhangzott Erlang példafüggvények gyűjteménye.
% Írta: Fehér Gábor <feherga@gmail.com>

-module(hello).
-export([avg/2, max/2]).
-export([fibo/1, fibo2/1]).
% A segédfüggvényeket is kiexportáljuk, hogy lehessen őket a shellből tesztelni.
-export([negyzetek/1, kisebbek/2, nemkisebbek/2, qsort/1]).
-export([kisebbek2/2, nemkisebbek2/2, negyzetek2/1, qsort2/1]).


% > A = 42.
% > B = 5.
% > C = A+B.
% > A = 6. ERROR
% > f().
% > S = "Hello, ".
% > R = "world! ".
% > Q = S++R.

avg(A, B) ->
    Sum = A+B,
    Sum / 2.

max(A, B) when A > B ->
    A;
max(_, B) ->
    B.

fibo(N) when N =:= 0 ->
    0;
fibo(N) when N =:= 1 ->
    1;
fibo(N) when N > 1 ->
    fibo(N-1)+fibo(N-2).

% a = 0; b = 1;
% while (n > 1) {
%    c = a+b;
%    a = b; b = c;
%    n = n - 1;
% }
% output: a
fibo2(N) ->
    A = 0, B = 1,
    fibo3(N, A, B).

fibo3(N, _, B) when N =:= 1 ->
    B;
fibo3(N, A, B) ->
    C = A+B,
    A2 = B, B2 = C,
    fibo3(N-1, A2, B2).

% > L = [42, 3.14, "hello", -1].
% > hd(L).
% > tl(L).
% > hd(tl(tl(L))).
% > [H|T] = L.
% > H.
% > T.
% > H2 = 42.
% > T2 = [43, 44, 45].
% > [H2|T2].
negyzetek([]) ->
    [];
negyzetek(L) ->
    [H1|T1] = L,
    H2 = H1*H1,
    T2 = negyzetek(T1),
    [H2|T2].
% Második klóz egyszerűbben:
%negyzetek([H|T]) ->
%    [H*H|negyzet(T)].

kisebbek([], _) ->
    [];
kisebbek([B|L], A) when B < A ->
    Tail = kisebbek(L, A),
    [B|Tail];
% ez a klóz rövidebben:
%kisebbek([B|L], A) when B < A ->
%    [B|kisebbek(L, A)];
kisebbek([_B|L], A) ->
    kisebbek(L, A).

nemkisebbek([], _) ->
    [];
nemkisebbek([B|L], A) when B >= A ->
    Tail = nemkisebbek(L, A),
    [B|Tail];
% ez a klóz rövidebben:
%kisebbek([B|L], A) when B >= A ->
%    [B|nemkisebbek(L, A)];
nemkisebbek([_B|L], A) ->
    nemkisebbek(L, A).

qsort([]) ->
    [];
qsort([A|L]) ->
    L1 = kisebbek(L, A),
    L2 = nemkisebbek(L, A),
    qsort(L1)++[A]++qsort(L2).

% -------------------

kisebbek2(L, A) ->
    F = fun (X) -> X < A end,
    lists:filter(F, L).
nemkisebbek2(L, A) ->
    F = fun (X) -> X >= A end,
    lists:filter(F, L).
negyzetek2(L) ->
    F = fun (X) -> X*X end,
    lists:map(F, L).

qsort2([]) ->
    [];
qsort2([A|L]) ->
    L1 = lists:filter(fun (X) -> X < A end, L),
    L2 = lists:filter(fun (X) -> X >= A end, L),
    qsort2(L1)++[A]++qsort2(L2).
(Vissza)