public Evaluator(UnificationStrategy unifier, RuleResolver ruleResolver) {
        if (unifier == null) {
            throw new IllegalArgumentException(
                    "The given unifier must not be null.");
        }
        if (ruleResolver == null) {
            throw new IllegalArgumentException(
                    "The given rule resolver must not be null.");
        }

        this.unifier = unifier;
        this.ruleResolver = ruleResolver;
        this.variableIdGenerator = new AtomicInteger();
    }