optimization - we don't need to store bindings in a hashmap before rule
evaluation