Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 4.53 KB | None | 0 0
  1. -module(przyklady).
  2. -export([map/2,any/2,any_dwa/2,foreach/2,foreach_dwa/2,all/2,all_dwa/2,iloczynListFoldl/2,krotki/1,dropwhile/2,takewhile/2,zlicz_wystapienia/2,foldl_matrix/3,suma_wiersza/1,sum_matrix/1,sumowanie/1,sumowanie_nieparzystych/1,sumowanie_parzystych/1,zamien_liczbe/3,zamien_na_liczbe_przeciwna/1,zamien_na_wartosc_bezwzgledna/1,usun_nieparzyste/1,usun_ujemne/1]).
  3.  
  4. map(F,L)-> lists:foldl(fun (Arg, Acc)-> Acc++[F(Arg)] end, [], L).
  5.  
  6. %map(fun(X)->X*2 end,[1,2,3]).
  7.  
  8. any(F,L)-> Tmp = lists:foldl(fun(Arg,Acc)-> Acc++[F(Arg)] end, [], L),
  9.            Tmp2 = lists:member(true, Tmp),
  10.                 if Tmp2 -> true;
  11.                 true -> false
  12.            end.
  13.  
  14. any_dwa(Pred, L) ->
  15.     InnerFun = fun(Element, Acc) ->
  16.         PredResult = Pred(Element),
  17.         if PredResult -> Acc++[Element];
  18.         true -> Acc end end,
  19.     FoldlResult = lists:foldl(InnerFun, [], L),
  20.     if length(FoldlResult) == 0 -> false;
  21.     true -> true end.
  22.  
  23. %any(fun(X)->X<2 end, [1,2,3,4,5]).
  24.  
  25. foreach(F, L) ->
  26.     lists:foldl(fun(Arg,_)->F(Arg) end,ok,L).
  27.  
  28. foreach_dwa(Func, L) ->
  29.     lists:foldl(fun(Element, Acc) -> Acc++[Func(Element)] end, [], L).
  30.    
  31. %foreach(fun(X)->erlang:display(X*2) end, [1,2,3]).
  32.  
  33. all(F, L) ->
  34.         Tmp = lists:foldl(fun(Arg,Acc)->[F(Arg)]++Acc end, [], L),
  35.         Tmp2 = lists:any(fun(X)->X==false end, Tmp),
  36.         if
  37.             Tmp2 -> false;  % tu można dopisać Tmp2 == true
  38.             true -> true
  39.         end.
  40.  
  41. all_dwa(Pred, L) ->
  42.     InnerFun = fun(Element, Acc) ->
  43.         PredResult = Pred(Element),
  44.         if PredResult -> Acc++[Element];
  45.         true -> Acc end end,
  46.     FoldlResult = lists:foldl(InnerFun, [], L),
  47.     if length(L) == length(FoldlResult) -> true;
  48.     true -> false end.
  49.    
  50. iloczynListFoldl(L,L2) ->
  51.         lists:foldl(fun(Arg,Acc)->Acc++[lists:foldl(fun(A,Ak)->Ak++[A*Arg] end,[],L2)] end,[],L).
  52.  
  53. krotki(Tuples) ->
  54.        lists:foldl(fun(Tuple,Acc)-> if element(1,Tuple) == done -> Acc+element(2,Tuple); true -> Acc end end, 0, Tuples).
  55.  
  56. zlicz_wystapienia(Liczba, M)->lists:foldl(fun(Wiersz,Acc1)->Acc1+lists:foldl(fun(E,Acc2)->if E==Liczba -> Acc2+1; true->Acc2 end end,0,Wiersz)end,0,M).
  57.  
  58. foldl_matrix(F, Acc, Mat) ->
  59.     Tmp = is_list(Acc),
  60.     if Tmp ->
  61.         lists:foldl(fun(X,Accum)->Accum++[lists:foldl(fun(C,A)->F(C,A) end, Acc,X)] end, Acc, Mat);
  62.         true -> lists:foldl(fun(X,Accum)->Accum+(lists:foldl(fun(C,A)->F(C,A) end, Acc, X)) end, Acc, Mat)
  63.     end.
  64.  
  65. suma_wiersza(Wiersz) -> lists:foldl(fun(Arg, Acc) when Arg rem 2 =/= 0 -> Acc+Arg;
  66.                                        (_,Acc)->Acc end, 0, Wiersz).
  67.  
  68. sum_matrix(Matrix) -> lists:foldl(fun(Wiersz, Acc)-> Acc+suma_wiersza(Wiersz) end, 0, Matrix).
  69.  
  70. sumowanie(M) ->lists:foldl(fun(Wiersz,Acc1)->Acc1+lists:foldl(fun(E,Acc2)->Acc2+E end,0,Wiersz) end,0,M).
  71.  
  72. sumowanie_parzystych(M)->lists:foldl(fun(Wiersz,Acc1)->Acc1+lists:foldl(fun(E,Acc2) when E rem 2 == 0 ->Acc2+E; (_,Acc2)->Acc2 end,0,Wiersz) end,0,M).
  73.  
  74. sumowanie_nieparzystych(M)->lists:foldl(fun(Wiersz,Acc1)->Acc1+lists:foldl(fun(E,Acc2) ->if E rem 2 == 1 ->Acc2 +E; true ->Acc2 end end,0,Wiersz)end,0,M).
  75.  
  76. zamien_na_wartosc_bezwzgledna(M)->lists:foldl(fun(Wiersz, Acc1)->Acc1++[lists:foldl(fun(E,Acc2) when E<0 -> Acc2++[abs(E)];(E,Acc2)->Acc2++[E] end,[],Wiersz)] end,[],M).
  77.  
  78. zamien_na_liczbe_przeciwna(M)->lists:foldl(fun(Wiersz,Acc1)->Acc1++[lists:foldl(fun(E,Acc2) -> Acc2++[E*(-1)] end,[],Wiersz)]end,[],M).
  79.  
  80. zamien_liczbe(Liczba,Zmieniona,M)->lists:foldl(fun(Wiersz,Acc1)->Acc1++[lists:foldl(fun(E,Acc2)-> if E == Liczba -> Acc2++[Zmieniona]; true -> Acc2++[E] end end,[],Wiersz)] end,[],M).
  81.  
  82. usun_nieparzyste(M)->lists:foldl(fun(Wiersz,Acc1) -> Acc1++[lists:foldl(fun(E,Acc2) when E rem 2 == 0 -> Acc2++[E]; (_,Acc2)->Acc2 end, [], Wiersz)] end,[],M).
  83.  
  84. usun_ujemne(M)->lists:foldl(fun(Wiersz,Acc1)-> Acc1++[lists:foldl(fun(E,Acc2) when E>0 ->Acc2++[E];(_,Acc2)->Acc2 end,[],Wiersz)] end,[],M).
  85.  
  86. dropwhile(Func, L) ->
  87.     try
  88.         InnerFun = fun(Element, Acc) ->
  89.             PredResult = Func(Element),
  90.             if PredResult == false -> Acc + 1;
  91.             true -> throw({bad_value, lists:sublist(L, Acc, length(L) - Acc + 1)}) end end,
  92.         lists:foldl(InnerFun, 0, L)
  93.     catch
  94.         throw: {bad_value, Acc} ->  Acc end.
  95.  
  96. takewhile(Func, L) ->
  97.     try
  98.         InnerFun = fun(Element, Acc) ->
  99.             PredResult = Func(Element),
  100.             if PredResult -> Acc++[Element];
  101.             true -> throw({bad_value, Acc}) end end,
  102.         lists:foldl(InnerFun, [], L)
  103.     catch
  104.         throw: {bad_value, Acc} ->  Acc end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement