YAP 7.1.0
expressions

This library provides lambda expressions to simplify higher order programming based on call/N.

This library provides lambda expressions to simplify higher order programming based on call/N.

Lambda expressions are represented by ordinary Prolog terms There are two kinds of lambda expressions:

FreeX1^X2^ XN^Goal
\X1^X2^ XN^Goal

The second is a shorthand for t+\X1^X2^..^XN^Goal

All other variables of Goal are considered local variables They must not appear outside the lambda expression This restriction is currently not checked Violations may lead to unexpected bindings

In the following example the parentheses around X>3 are necessary

?- use_module(library(lambda)).
?- use_module(library(apply)).
?- maplist(\X^(X>3),[4,5,9]).
maplist.
use_module( +Files )

In the following X is a variable that is shared by both instances of the lambda expression The second query illustrates the cooperation of continuations and lambdas The lambda expression is in this case a continuation expecting a further argument

?- Xs = [A,B], maplist(X+\Y^dif(X,Y), Xs).
Xs = [A, B],
dif(X, A),
dif(X, B).
?- Xs = [A,B], maplist(X+\dif(X), Xs).
Xs = [A, B],
dif(X, A),
dif(X, B).
dif( X, Y)

The following queries are all equivalent To see this, use the fact f(x,y)

?- call(f,A1,A2).
?- call(\X^f(X),A1,A2).
?- call(\X^Y^f(X,Y), A1,A2).
?- call(\X^(X+\Y^f(X,Y)), A1,A2).
?- call(call(f, A1),A2).
?- call(f(A1),A2).
?- f(A1,A2).
A1 = f,
A2 = f.

Further discussions http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord

Todo:
Static expansion similar to apply_macros
Author
Ulrich Neumerkel