[ External Interface | Reference Manual | Alphabetic Index ]

external(++PredSpec)

Declares PredSpec to be an external predicate
PredSpec
Of the form Atom/Integer (predicate name/arity).

Description

Declares the (may be not yet visible) predicate PredSpec to be an external predicate.

This declaration is needed to compile calls to an external predicate before it is actually defined with external/2.

Modes and Determinism

Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

Exceptions

(4) instantiation fault
PredSpec is not instantiated.
(5) type error
PredSpec is not of the form Atom/Integer.

Examples

Success:

   % compiling a call to an external before its definition (see description
   % of external/2 for detail on creating external predicates).
      [eclipse]: [user].
       :- import prmsg/1 from msg_lib.
       :- external(prmsg/1). % declare its call_type
       hello :- prmsg("hello").
       user      compiled 216 bytes in 0.03 seconds

   % definition of sines/2 will not raise an inconsistent type definition
   % thanks to the proper declaration above.
      [eclipse]: sh("cat msg_lib.pl").
      :- module(msg_lib).
      :- load('msg.so'). % see example in external/2
      :- external(prmsg/1, p_prmsg).
      :- export prmsg/1.

      yes
      [eclipse]: [msg_lib].
       msg_lib.pl      compiled 0 bytes in 0.18 seconds
      yes.
      [eclipse]: hello.
      message: hello
      yes.

Error:
      external(PredSpec).            (Error 4).
      external("p/0").               (Error 5).

      [eclipse]: [user].
       p :- a.
       user   compiled 32 bytes in 0.00 seconds
      yes.
      [eclipse]: external(a/0).        (Error 62).



See Also

external / 2, load / 1