lnicola
6/26/2014 - 12:07 PM

crypto.hs

import Data.List

ev s = map (\x -> (x, elemIndices x s)) $ nub s

unifyAux [] [] substs = Just substs
unifyAux (x:xs) (y:ys) substs = if snd x == snd y then unifyAux xs ys ((fst x, fst y) : substs) else Nothing
unifyAux _ _ _ = Nothing

unify s1 s2 = unifyAux (ev s1) (ev s2) []