:- use_module(library(function_expansion)). user:function_expansion(incr(N), X, X is N+1). main :- format('After 2 comes ~p~n', [incr(2)]).
Prolog doesn't offer function syntax. Anything one can do with functions, she can do with predicates. The syntax is a little verbose because it requires an auxiliary variable.
For example, one might approximate pi:
pi(3.14159). main :- pi(Pi), format('pi is roughly ~p~n', [Pi]).
It's often obnoxious to think up a name for an auxiliary variable.
function_expansion/3 lets you write macros so that
pi can be included
directly in format's arguments. Auxiliary variables are generated for
you at compile time.
Repository available on GitHub: https://github.com/mndrix/function_expansion
Using SWI-Prolog 6.3 or later:
$ swipl 1 ?- pack_install(function_expansion).
|function_expansion/3||Like term_expansion/2, function_expansion/3 provides for macro expansion of Prolog source code.|