Merge pull request #1712 from triska/lambda_doc

DOC: convert code samples in library(lambda) to DocLog format
This commit is contained in:
Mark Thom
2023-01-26 02:02:12 +01:00
committed by GitHub

View File

@@ -50,11 +50,13 @@ programming based on call/N.
Lambda expressions are represented by ordinary Prolog terms. Lambda expressions are represented by ordinary Prolog terms.
There are two kinds of lambda expressions: There are two kinds of lambda expressions:
```
Free+\X1^X2^ ..^XN^Goal Free+\X1^X2^ ..^XN^Goal
\X1^X2^ ..^XN^Goal \X1^X2^ ..^XN^Goal
```
The second is a shorthand for t+\X1^X2^..^XN^Goal. The second is a shorthand for `t+\X1^X2^..^XN^Goal`.
Xi are the parameters. Xi are the parameters.
@@ -70,20 +72,20 @@ currently not checked. Violations may lead to unexpected bindings.
In the following example the parentheses around X>3 are necessary. In the following example the parentheses around X>3 are necessary.
== ```
?- use_module(library(lambda)). ?- use_module(library(lambda)).
?- use_module(library(lists)). ?- use_module(library(lists)).
?- maplist(\X^(X>3),[4,5,9]). ?- maplist(\X^(X>3),[4,5,9]).
true. true.
== ```
In the following X is a variable that is shared by both instances of In the following X is a variable that is shared by both instances of
the lambda expression. The second query illustrates the cooperation of the lambda expression. The second query illustrates the cooperation of
continuations and lambdas. The lambda expression is in this case a continuations and lambdas. The lambda expression is in this case a
continuation expecting a further argument. continuation expecting a further argument.
== ```
?- use_module(library(dif)). ?- use_module(library(dif)).
true. true.
@@ -92,11 +94,12 @@ continuation expecting a further argument.
?- Xs = [A,B], maplist(X+\dif(X), Xs). ?- Xs = [A,B], maplist(X+\dif(X), Xs).
Xs = [A,B], dif:dif(X,A), dif:dif(X,B). Xs = [A,B], dif:dif(X,A), dif:dif(X,B).
== ```
The following queries are all equivalent. To see this, use The following queries are all equivalent. To see this, use
the fact f(x,y). the fact `f(x,y)`.
==
```
?- call(f,A1,A2). ?- call(f,A1,A2).
?- call(\X^f(X),A1,A2). ?- call(\X^f(X),A1,A2).
?- call(\X^Y^f(X,Y), A1,A2). ?- call(\X^Y^f(X,Y), A1,A2).
@@ -105,10 +108,10 @@ the fact f(x,y).
?- call(f(A1),A2). ?- call(f(A1),A2).
?- f(A1,A2). ?- f(A1,A2).
A1 = x, A2 = y. A1 = x, A2 = y.
== ```
Further discussions Further discussions
http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord [http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord](http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord)
@tbd Static expansion similar to apply_macros. @tbd Static expansion similar to apply_macros.
@author Ulrich Neumerkel @author Ulrich Neumerkel