| Did you know ... | Search Documentation: |
| Packs (add-ons) for SWI-Prolog |
| Title: | Help for writing function-like macros |
|---|---|
| Rating: | |
| Latest version: | 0.1.2 |
| SHA1 sum: | a5e72c6b021b260352cdf8865b81f536d1c8b035 |
| Author: | Michael Hendricks <michael@ndrix.org> |
| Maintainer: | Michael Hendricks <michael@ndrix.org> |
| Packager: | Michael Hendricks <michael@ndrix.org> |
| Home page: | http://packs.ndrix.com/function_expansion/index.html |
| Download URL: | http://packs.ndrix.com/function_expansion/function_expansion-0.1.2.tgz |
| Version | SHA1 | #Downloads | URL |
|---|---|---|---|
| 0.1.2 | 2a1c5957081c83f87d8f2500ee30e48a12e0352f | 259 | http://packs.ndrix.com/function_expansion/function_expansion-0.1.2.tgz |
| 13483604fe59af9c45bf9ab02473bfc1a7f8877f | 1 | https://github.com/esad/function_expansion.git | |
| a5e72c6b021b260352cdf8865b81f536d1c8b035 | 6 | https://github.com/esad/function_expansion.git | |
| 0.1.1 | 13d13fe589bc28af1f05df621107e39688dc08a6 | 1 | http://packs.ndrix.com/function_expansion/function_expansion-0.1.1.tgz |
| 0.1.0 | 182778ae2cb4ee06df81cdc6a5c45764d10a75a1 | 8 | http://packs.ndrix.com/function_expansion/function_expansion-0.1.0.tgz |
:- 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).
Pack contains 9 files holding a total of 6.3K bytes.