public Func<bool> Call(ILiteral predicate, params IReferenceLiteral[] arguments)
        {
            // Assume that predicate is correct

            // Load the arguments into a simple unifier
            var unifier = new SimpleUnifier();
            unifier.LoadArguments(arguments);

            // Unify using the predicate
            unifier.ProgramUnifier.Bind(_clauseAssignments[0].Assignments);
            if (!unifier.ProgramUnifier.Compile(_clauseAssignments[0].Assignments))
            {
                // Fail if we can't unify
                return () => false;
            }

            // Call using the clauses
            return SolveAllSubclauses(_clauseAssignments.Skip(1), unifier);
        }