Tabling integrates well with most non-pure aspects of Prolog. Predicates with side-effects like read/1 and write/1 can be used freely in tabled predicates as long as it is remembered that only the first call to a goal will execute program clauses while the rest will look up answers from a table. However, other extra-logical constructs like the cut (!) pose greater difficulties. Subsumption-based tabling is also theoretically precluded from correct interaction with certain meta-logical predicates.