Availability:built-in
[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)
using
:
/2
causes callable to succeed on any
meta-argument.66We 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).
?- p(22).
ERROR: Type error: `callable' expected, found `22'
ERROR: In:
ERROR: [6] p(user:22)