load "Listsort"; load "String"; fun atfed (n, mit: string, mivel: string) = if size mit < n then false else if size mivel < n then false else if (String.isPrefix (substring(mit,size mit-n, n)) mivel) then true else false; fun ellenoriz (_,_,[]) = [] | ellenoriz (n, elem, lista::listatail) = if atfed(n, elem, lista) then (n,lista)::ellenoriz(n, elem, listatail) else ellenoriz(n,elem,listatail); fun levalogat (_,[],_) = [] | levalogat (n,lista::listatail,[]) = if (size ellenoriz(n,lista,listatail) <> 0 ) then (lista, ellenoriz(n,lista,listatail))::levalogat(n,listatail,[lista]) | levalogat (n,lista::listatail,marad) = if (size ellenoriz(n,lista,marad)) <> 0 andalso (size ellenoriz(n,lista,listatail) <> 0) then (lista, (ellenoriz(n,lista,marad)))::((lista, ellenoriz(n,lista,listatail)))::(levalogat(n,listatail,[lista]@marad)); fun atfedok n lista = levalogat(n, Listsort.sort String.compare lista,[]);