[ Obsolete | Reference Manual | Alphabetic Index ]

# call(+Goal, +Module)

Succeeds if Goal (which is visible in module Module) succeeds.

Goal
  Atom or compound term.
Module
  Atom.

### This built-in predicate is obsolete!

## Description

Calls a goal Goal from the module Module. This predicate is used to call goals whose functors and visibility are known only at the time they are called. It may be used to implement tool bodies.

Note that !/0 does not cut through call/2.

### Fail Conditions

Fails if Goal fails

### Resatisfiable

Resatisfiable if Goal is resatisfiable

### Exceptions

(4) instantiation fault
  Goal is not instantiated.
(4) instantiation fault
  Module is not instantiated.
(5) type error
  Goal is neither an atom nor a compound term.
(5) type error
  Module is not an atom.
(68) calling an undefined procedure
  Goal is an undefined procedure in Module.

## Examples

    Success:
          [eclipse]: [user].
           :-module(m).
           p.
           user        compiled 28 bytes in 0.00 seconds
          yes.
          [eclipse]: p.
          calling an undefined procedure p in module eclipse
          [eclipse]: call(p, m).
          yes.

    Fail: call(fail, any).

    Error:
          call(Var,eclipse).                (Error 4).
          call(ls,Var).                     (Error 4).
          call("write(a)",eclipse).         (Error 5).
          call(foo(a),eclipse).             (Error 68).

## See Also

call / 1, @ / 2, : / 2