Active unificationはunify.c、unify2.cに定義されている。 passive unificationと比較すると、明かに複雑である。
単一化器のトップレベルは基本的に、do_unify(), do_unify_value()の2つである。 両者の違いは、前者が第一、二引数共にその構造がはっきりしない場合に 呼びだされるのに対して、後者は第二引数(x, y とあった場合のy)は 具体値であることが保証されているため処理が単純であることである。
また、do_unifyでは、基本的に1レベルずつしか単一化をせず、
構造体の単一化については、1レベルずつ、単一化を行うゴールをエンキューする
ことにより実現している。
単一化を行う際には、ゴールがフックされている変数を
具体化することにより、中断ゴールを再開したり、consumer/generator object
のunifyメソッドの起動が行われることがある。
通常のdo_unifyでは連続して、それらの処理を行うが、
「中断構造」を発見したときに、それらの再開やunify methodの起動を行わずに
単一化を行うゴールをエンキューしてしまう版の単一化器も存在する
(do_shallow_unify())。
ここでは、もっとも複雑な版である、do_unify()についての説明を行い、 他の版は特に説明しないこととする。