changed the interface of builtin functions so that they are able to decide whether to evaluate or not their arguments (this will be useful for special operations like the boolean and