Microsoft Windows [版本 10.0.18363.1440]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\Users\5-101>erl
Eshell V10.7 (abort with ^G)
1> c:cd("d:/erlang-app/test1/src").
c:/Users/5-101
ok
2> c:cd("e:/erlang-app/test1/src").
e:/erlang-app/test1/src
ok
3> c(sets1).
{ok,sets1}
4> S1 = sets1:new().
[]
5> S2 = sets1:add_element(a, S1).
[a]
6> S3 = sets1:add_element(b, S2).
[b,a]
7> S1.
[]
8> S2.
[a]
9> S3.
[b,a]
10>
-module(sets1).
-export([new/0, add_element/2, del_element/2,
is_element/2, is_empty/1, union/2, intersection/2]).
new() -> [].
add_element(X, Set) ->
case is_element(X, Set) of
true -> Set;
false -> [X|Set]
end.
del_element(X, [X|T]) -> T;
del_element(X, [Y|T]) -> [Y|del_element(X,T)];
del_element(_, []) -> [].
is_element(H, [H|_]) -> true;
is_element(H, [_|Set]) -> is_element(H, Set);
is_element(_, []) -> false.
is_empty([]) -> true;
is_empty(_) -> false.
union([H|T], Set) -> union(T, add_element(H, Set));
union([], Set) -> Set.
intersection(S1, S2) -> intersection(S1, S2, []).
intersection([], _, S) -> S;
intersection([H|T], S1, S) ->
case is_element(H,S1) of
true -> intersection(T, S1, [H|S]);
false -> intersection(T, S1, S)
end.