[ Syntax Settings | Reference Manual | Alphabetic Index ]

# current_macro(-TermClass, -TransPred, -Options, -Module)

Succeeds if TermClass is a macro with the transformation predicate TransPred defined in module Module and flags Options.

TermClass
  Term in the form Atom/Integer or atom or variable.
TransPred
  Term in the form Atom/Integer or variable.
Options
  List or a variable.
Module
  Atom or variable.

## Description

This predicate enumerates all visible macros and retrieves their definition. The arguments TransPred and Options correspond to the arguments of macro/3 or portray/3. Module is the definition module of TransPred and it can be used for calling the TransPred explicitly (e.g. using :/2).

### Modes and Determinism

- current_macro(-, -, -, -) is nondet

### Modules

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

### Exceptions

(5) type error
  TermClass not of form Atom/Integer.
(5) type error
  TransPred not of form Atom/Integer.
(5) type error
  Options not a list.

## Examples

    [eclipse]: [user].             % define a macro
     tr_a(a(X), b(X,X)).
     :- local macro(a/1, tr_a/2, []).

    yes.
    [eclipse]: current_macro(F, T, O, M).  % list visible macros

    F = (-->) / 2                  % predefined macro
    T = trdcg / 3
    O = [global, clause]
    M = macro     More? (;)

    F = (if) / 2                   % predefined macro
    T = tr_if / 2
    O = [global, clause]
    M = coroutine     More? (;)

    F = a / 1                      % our user defined macro
    T = tr_a / 2
    O = [local]
    M = eclipse     More? (;)

    F = no_macro_expansion / 1     % predefined macro
    T = trprotect / 2
    O = [global, protect_arg]
    M = macro     More? (;)

    no (more) solution.

## See Also

macro / 3, portray / 3, erase_macro / 2