[Q] Does anyone have a radix
rwuyts at vub.ac.be
Wed Aug 2 05:28:09 UTC 2000
Unification is a two-way, generalized form of pattern matching between two
terms. If you have two terms (say A and B), and an environemt E, then
unifying A and B means comparing A and B (filling in the results in the
environment) in such a way that, after unification, substituting what was
found in A and B shoud give an equal term. I think it originated in logic
programming, so I'll give some examples to clarify this explanation (I use
Smalltalk comments, and variables are denoted with question marks):
1. A = ?var "a variable",
B = john "a constant"
E =  "an empty environment"
unifying A and B will give an environment E = [?var -> john], where ?var
is bound to john.
substituting the environment E in A yields: john.
substituting the environment E in B also yiels: john.
2. A = foo(bar, fi(john))
B = foo(?one, fi(?two))
E = 
will yield E = [?one -> bar,?two->john]
3. A = foo(?one, fi(john))
B = foo(bar, fo(?two))
will yield the same as above. Note however that the pattern matching
happens in two ways: bindings for variables are found in such a way as to
making the terms equal after substitution, regardless where they occur.
More information about unification (including algorythms) can be found in
most Logic Programming or Prolog books. Since I implemented a logic
programming languages, we implemented some of these (which is simple to do).
>>Thanks, Mark. I'll dig into it. Perhaps there will be something about
>>unification. I've never heard of that term before.
> I'll attempt a definition: Unification is the process of mapping two
> forms (e.g., equations) onto one another such that variables (in the
> form) are set to appropriate values and constraints are maintained.
> The process may involve backtracking, and can also end in failure (if
> no match is possible).
> I did some web-hunting and this page seems like a reasonable intro to
> I first learned about it reading Patrick Winston's first book on Lisp
> -- I remember typing in the code and poking at it forever trying to
> figure out how it was working. I think that the best description of
> the algorithm, though, is in Brian Harvey's "Computer Science Logo
> Style" series (Volume 3, I think). (In general, next to "Structure
> and Interpretation of Computer Programs," Harvey's books are my
> favorite CS texts.)
> Mark Guzdial : Georgia Tech : College of Computing : Atlanta, GA 30332-0280
> Associate Professor - Learning Sciences & Technologies.
> Collaborative Software Lab - http://coweb.cc.gatech.edu/csl/
> (404) 894-5618 : Fax (404) 894-0673 : guzdial at cc.gatech.edu
Roel Wuyts Programming Technology Lab
rwuyts at vub.ac.be Vrije Universiteit Brussel
Webmaster of European Smalltalk User Group: www.esug.org
More information about the Squeak-dev