-module(samefringe). -export([start/2,gen/2,gen/3]). say(String) -> io:format("~s ~n", [String]). gen([],top) -> receive { done } -> say("match"); _ -> say("no match") end; gen([],internal) -> true; gen([H|T],Level) when integer(H) -> receive { H1, P } -> if (H == H1) -> P ! { ok }, gen(T,Level); true -> P ! { stop }, say("no match") end; { done } -> say("no match") end; gen([H|T],Level) when list(H) -> gen(H,internal),gen(T,Level). gen([],P,top) -> P ! { done }; gen([],_,internal) -> true; gen([H|T],P,Level) when integer(H) -> P ! { H, self() }, receive { ok } -> gen(T,P, Level); { stop } -> say("no match") end; gen([H|T],P,Level) when list(H) -> gen(H,P,internal),gen(T,P,Level). start(T1,T2) -> say("starting samefringe ...."), Pid = spawn(samefringe,gen,[T1,top]), spawn(samefringe,gen,[T2,Pid,top]).