backtracking primitives tag(x) tag point keyed by x, fail (x,i,f) return to ith previous tag(x) and evaluate f in that environment. (redo tag(x assign (x,y) of x<=y, tentatively assign y to x (undone on fail across untag (x,i) remove tags from and including ith previous tag(x) optional args eg fail () fails previous tag point