Machine Learning: A Constraint-Based Approach