Skip to content

Instantly share code, notes, and snippets.

@zuchmanski
Created October 20, 2013 16:11
Show Gist options
  • Save zuchmanski/7071657 to your computer and use it in GitHub Desktop.
Save zuchmanski/7071657 to your computer and use it in GitHub Desktop.
-module(m).
-export([power/2, contains/2, duplicateElements/1, sumFloats/1, sumFloatsTail/2, sumFloatsTail/1, sumFloatsNotTail/1, dupElem/1, calc/1]).
% power
power(_, 0) -> 1;
power(N, E) -> power(N, E - 1) * N.
% contains/2, która jako parametry weźmie listę i wartość, i zwróci true jeśli lista zawiera wartość.
contains( [], _ ) ->
false;
contains( [H | _], H) ->
true;
contains( [_ | T], E) ->
contains( T, E ).
% sumFloats/1, która zsumuje elementy będące liczbami zmiennoprzecinkowymi.
sumFloats(L) ->
lists:foldl(fun(X, Sum) -> X + Sum end, 0, L).
% Tails
sumFloatsTail(L) ->
sumFloatsTail(L, 0).
sumFloatsTail([], Sum) ->
Sum;
sumFloatsTail([H | L], Sum) ->
sumFloatsTail(L, Sum + H).
% NotTail
sumFloatsNotTail([]) ->
0;
sumFloatsNotTail([H | L]) ->
H + sumFloatsNotTail(L).
% duplicateElements/1, która zwróci listę zawierającą każdy z elementów dwukrotnie.
duplicateElements(L) ->
lists:foldr(
fun(X, Sum) ->
X ++ Sum end,
[],
lists:map(
fun(E) -> [ E | [E]] end,
L
)
).
% without Map Reduce
dupElem( [] ) ->
[];
dupElem( [H | L] ) ->
[H | [ H | dupElem( L )]].
% parsowanie ONP
% ((2+7)/3+(14-3)*4)/2
% 2 7 + 3 / 14 3 - 4 * + 2 /
calc( In ) ->
onp(string:tokens(In, " "), []).
% ONP
onp( [], [H | L] ) ->
H;
onp([ H | L], [ T1, T2 | Stos ]) when H == "+" ->
onp( L, [ (T1 + T2) | Stos ]);
onp([ H | L], [ T1, T2 | Stos ]) when H == "-" ->
onp( L, [ (T2 - T1) | Stos ]);
onp([ H | L], [ T1, T2 | Stos ]) when H == "*" ->
onp( L, [ (T1 * T2) | Stos ]);
onp( [H | L], Stos) ->
onp( L, [list_to_integer(H) | Stos]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment