Observing that equalities and disequalities between tree terms in Prolog II are basically constraint statements, the idea of generalizing logic programming to arbitrary constraint languages starts winning recognition in the middle of the 80's (cf. the theoretical work of J-L. Lassez, J. Jaffar and M. Maher at the IBM Yorktown center).
The first implementations of the new concept of "Constraint Logic Programming" are Prolog III, CLP(R) and CHIP.
"The Prolog III programming language extends Prolog by redefining the fundamental process at its heart: unification. Into this mechanism, Prolog III integrates refined processing of trees and lists, number processing, and processing of two-valued Boolean algebra."
Lists, rational numbers and booleans become specific kinds of trees with which the Prolog machinery must solve the constraints introduced by the program clauses, incrementally. For handling linear inequalities for instance, Prolog III resorts to a Simplex type algorithm.