Documentation ¶
Overview ¶
Package ut implements "Yet Another Efficient Unification Algorithm" by Alin Suciu (https://arxiv.org/abs/cs/0603080v1). The unification algorithm is at the core of the logic programming paradigm, the first unification algorithm being developed by Robinson. More efficient algorithms were developed later by Martelli and, Montanari. Here yet another efficient unification algorithm centered on a specific data structure, called the Unification Table.
Index ¶
Examples ¶
Constants ¶
View Source
const ( EOF = -(iota + 1) // reached end of source Atom // a Prolog atom, possibly quoted Comment // a comment Float // a floating point number Functor // an atom used as a predicate functor FullStop // "." ending a term Int // an integer String // a double-quoted string Variable // a Prolog variable Void // the special "_" variable )
The result of Scan is one of these tokens or a Unicode character.
Variables ¶
Functions ¶
func Unify ¶
Unify returns a unification maps with VAR bindings. Also see ut.MGU for particular terms.
Example ¶
x, y := "f(X1,g(X2,X3),X2,b)", "f(g(h(a,X5),X2),X1,h(a,X4),X4)" mgu := Unify(x, y) fmt.Println("X1 = " + mgu["X1"]) fmt.Println("X2 = " + mgu["X2"]) fmt.Println("X3 = " + mgu["X3"]) fmt.Println("X4 = " + mgu["X4"]) fmt.Println("X5 = " + mgu["X5"])
Output: X1 = g(h(a,b),h(a,b)) X2 = h(a,b) X3 = h(a,b) X4 = b X5 = b
Types ¶
Click to show internal directories.
Click to hide internal directories.