76 lines
1.1 KiB
Erlang
Executable File
76 lines
1.1 KiB
Erlang
Executable File
-module(lib_misc).
|
|
-export([
|
|
for/3,
|
|
qsort/1,
|
|
pythag/1,
|
|
perms/1,
|
|
kabs/1,
|
|
kfilter/2,
|
|
kclassify/1,
|
|
stash_term/2,
|
|
retrieve_term/1
|
|
]).
|
|
|
|
for(Max, Max, F) ->
|
|
[F(Max)];
|
|
for(I, Max, F) ->
|
|
[F(I)|for(I+1, Max, F)].
|
|
|
|
qsort([]) ->
|
|
[];
|
|
qsort([Pivot|T]) ->
|
|
qsort([X || X <- T,
|
|
X < Pivot])
|
|
++
|
|
[Pivot]
|
|
++
|
|
qsort([X || X <- T,
|
|
X >= Pivot]).
|
|
|
|
|
|
pythag(N) ->
|
|
[{A,B,C} ||
|
|
A <- lists:seq(1,N),
|
|
B <- lists:seq(1,N),
|
|
C <- lists:seq(1,N),
|
|
A+B+C =< N,
|
|
A*A+B*B =:= C*C
|
|
].
|
|
|
|
perms([]) ->
|
|
[[]];
|
|
perms(L) ->
|
|
[[H|T] || H <- L,
|
|
T <- perms(L--[H])].
|
|
|
|
kabs(V) when is_integer(V), V >= 0 ->
|
|
V;
|
|
kabs(V) when is_integer(V) -> -V.
|
|
|
|
kfilter(P, [H|T]) ->
|
|
case P(H) of
|
|
true -> [H|kfilter(P, T)];
|
|
false -> kfilter(P, T)
|
|
end;
|
|
kfilter(_, []) -> [].
|
|
|
|
kclassify(N) ->
|
|
if
|
|
N >= 10 ->
|
|
high;
|
|
N >= 3 ->
|
|
medium;
|
|
true ->
|
|
low
|
|
end.
|
|
|
|
stash_term(Path, Term) ->
|
|
file:write_file(Path, erlang:term_to_binary(Term)).
|
|
|
|
retrieve_term(Path) ->
|
|
case file:read_file(Path) of
|
|
{ok, BinaryTerm} ->
|
|
erlang:binary_to_term(BinaryTerm);
|
|
{error, Reason} -> throw({read_file, Reason})
|
|
end.
|