Ever wanted to check if a predicate or operator is ISO?

iso_builtin_predicate/1

?- use_module(library(dialect/iso/iso_predicates)).
true.

?- iso_builtin_predicate(Head),numbervars(Head).
Head = true ;
Head = fail ;
Head = call(A) ;
Head = ! ;
Head =  (A;B) ;
Head =  (A, B) ;
Head =  (A->B) ;
Head = catch(A, B, C) ;
Head = throw(A) ;
Head =  (A=B) ;
...

iso_builtin_function/1

?- use_module(library(dialect/iso/iso_predicates)).
true.

?- iso_builtin_function(Head),numbervars(Head).
Head = A+B ;
Head = A-B ;
Head = A*B ;
Head = A//B ;
Head = A/B ;
Head = A rem B ;
Head = A mod B ;
Head = A**B ;
Head = A>>B ;
Head = A<<B ;
Head = A/\B ;
...

iso_builtin_function/1 also seems to handle arithmethic expressions.

?- iso_builtin_function(abs(sin(X))).
true.

As noted in the documentation

It originates from Logtalk.

3 Likes