[ Obsolete | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]

# b_external(++PredSpec)

Declares PredSpec to be a non-deterministic external predicate.

PredSpec
  Of the form Atom/Integer (predicate name/arity).

### This built-in predicate is obsolete!

## Description

Declares the (may be not yet visible) predicate PredSpec to be a non-deterministic external predicate.

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

### Modes and Determinism

- b_external(++) is det

### Exceptions

(4) instantiation fault
  PredSpec is not instantiated.
(5) type error
  PredSpec is not of the form Atom/Integer.
(62) inconsistent procedure redefinition
  A call to PredSpec has already been compiled as a deterministic external call.

## Examples

    Success:

       % compiling a call to an external before its definition (see description
       % of b_external/2 for detail on creating external predicates).
          [eclipse]: [user].
           :- import sines/2 from trig_lib.
           :- b_external(sines/2). % declare its call_type
           p(Values) :- sines(Res, Values), writeln(Res), fail.
           p(_).
           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 trig_lib.pl").
          :- module(trig_lib).
          :- load('sin.o', "-lm"). % see example in b_external/2
          :- b_external(sines/2, p_sines).
          :- export sines/2.

          yes
          [eclipse]: [trig_lib].
           trig_lib.pl      compiled 0 bytes in 0.18 seconds
          yes.
          [eclipse]: p([0.0,45.0,90.0,270.0]).
          0.0
          0.707107
          1.0
          -1.0
          yes.

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

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

## See Also

external / 1, b_external / 2, external / 2, load / 1