[ISO]callable(@Term)True if Term is bound to an atom or a compound term. This was
intended as a type-test for arguments to call/1, call/2
etc. Note that callable only tests the surface term. Terms such
as (22,true) are considered callable, but cause call/1
to raise a type error. Module-qualification of meta-argument (see meta_predicate/1)
causes callable to succeed on any
meta-argument.64We think that callable/1
should be deprecated and there should be two new predicates, one
performing a test for callable that is minimally module aware and
possibly consistent with type-checking in call/1
and a second predicate that tests for atom or compound.
Consider the program and query below:
:- meta_predicate p(0).
p(G) :- callable(G), call(G).
ERROR: Type error: `callable' expected, found `22'
ERROR:  p(user:22)