Erlangでいろいろ
30分プログラム、その118。Erlangの勉強を始めたので、車輪の再発明をいくつか。
絶対にlistsモジュールにもうあるんだろうなぁ。
ソースコード
-module(newbies). -compile(export_all). last([X])-> X; last([_|T]) -> last(T). foldr(_,Init,[]) -> Init; foldr(F,Init,[H|T]) -> F(H,foldr(F,Init,T)). foldl(_,Init,[]) -> Init; foldl(F,Init,[H|T]) -> foldl(F,F(Init,H),T). map(F,XS) -> foldr(fun(X,Y)-> [F(X)|Y] end,[],XS). length(XS) -> foldl(fun(X,_) -> X + 1 end,0,XS). filter(P,XS) -> foldr(fun(X,Y)-> case P(X) of true -> [X|Y]; false -> Y end end,[],XS). delete(X,[X|T])-> T; delete(X,[H|T]) -> [H|delete(X,T)]. merge(L,[]) -> L; merge([],L) -> L; merge([X|XS],[Y|YS]) -> [X,Y|merge(XS,YS)]. forall(_,[]) -> true; forall(P,[H|T]) -> P(H) andalso forall(P,T). exists(_,[]) -> false; exists(P,[H|T]) -> P(H) orelse exists(P,T). fact(0) -> 1; fact(N) -> N*fact(N-1).