4.5 Verify Type of a Term
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Built-in Predicates
        • Verify Type of a Term
          • var/1
          • nonvar/1
          • integer/1
          • float/1
          • rational/1
          • rational/3
          • number/1
          • atom/1
          • blob/2
          • string/1
          • atomic/1
          • compound/1
          • callable/1
          • ground/1
          • cyclic_term/1
          • acyclic_term/1
    • Packages
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.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).

?- p(22).
ERROR: Type error: `callable' expected, found `22'
ERROR: In:
ERROR:    [6] p(user:22)