集合モジュール

30分プログラム、その772。
なんとはなしに集合モジュールを書いてみました。

使い方

1> mySets:add(1,[1,2]).
[1,2]
2> mySets:add(1,[2]).
[1,2]
3> mySets:union([1,2],[1,3]).
[2,1,3]
4> mySets:intersect([1,2,3],[1,4]).
[1]
5> mySets:diff([1,2,3],[1,5]).
[2,3]

ソースコード

-module(mySets).
-compile([export_all]).

singleton(X) ->
    [ X ].

add(X, Xs) ->
    case lists:member(X, Xs) of
	true ->
	    Xs;
	_ ->
	    [X | Xs]
    end.

union(Xs, Ys) ->
    lists:foldl(fun add/2,Ys,Xs).

intersect(Xs, Ys) ->
    lists:filter(fun (X) -> lists:member(X,Xs) end,Ys).

diff(Xs, Ys) ->
    lists:filter(fun(X)-> not lists:member(X,Ys) end, Xs).