集合モジュール
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).