What is up with the cut (!)

Some quick comments. Richard’s explanation of when and where to use cuts is probably the best there is. It leads to these remarks:

It typically an indication that it is the client committing some predicate. Though it makes the cut invisible, is IMO more indication of something dubious. I very rarely use once/1.

->/2 is often good in “procedural” code. *->/2 is a strange beast that is better avoided until you really know what you are doing.

In what sense is this a replacement for the cut? Surely, dif/2 (and constraints in general) are incompatible with cuts.

Yes. This is more or less the same argument as using “non-defaulty” representation. The problem is that Prolog doesn’t make many guarantees.

Note that this also relates to my RFC Picat style matching