README.md updated with mention of partial applications
It does not do it much justice; documentation will come later. The test cases are comprehensive.master
parent
a351e94910
commit
d9f4894546
34
README.md
34
README.md
|
@ -15,7 +15,8 @@ functions and XSLT templates that take XSLT as input and produce XSLT
|
||||||
as output.
|
as output.
|
||||||
|
|
||||||
The system is fully tested---see the test cases for additional
|
The system is fully tested---see the test cases for additional
|
||||||
documentation as this project gets under way.
|
documentation as this project gets under way. This README will serve
|
||||||
|
as an informal manual until official documentation is produced.
|
||||||
|
|
||||||
|
|
||||||
## Higher-Order Functions
|
## Higher-Order Functions
|
||||||
|
@ -25,8 +26,8 @@ proprietary versions of their software. Others still may wish to
|
||||||
continue using XSLT 2.0.
|
continue using XSLT 2.0.
|
||||||
|
|
||||||
There are various approaches/kluges for this problem in earlier
|
There are various approaches/kluges for this problem in earlier
|
||||||
versions of XSLT; this implementation is motivated by Dimitre
|
versions of XSLT; the basis of this implementation is motivated by
|
||||||
Novatchev's work on [higher-order functions in FXSL][nova-ho].
|
Dimitre Novatchev's work on [higher-order functions in FXSL][nova-ho].
|
||||||
|
|
||||||
For example, consider an implementation of a filter function that
|
For example, consider an implementation of a filter function that
|
||||||
accepts a node set and a predicate:
|
accepts a node set and a predicate:
|
||||||
|
@ -66,6 +67,33 @@ work is needed. This can be included as part of a build process, and
|
||||||
the output included within a distribution.
|
the output included within a distribution.
|
||||||
|
|
||||||
|
|
||||||
|
### Partial Applications
|
||||||
|
Dynamic function applications using `f:apply` are partially applied if
|
||||||
|
the number of arguments provided is less than the arity of the target
|
||||||
|
function.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<!-- produces a new dynamic function of arity 5 - 3 = 2 -->
|
||||||
|
<variable name="partial"
|
||||||
|
select="f:apply( my:arity5(), 1, 2, 3 )" />
|
||||||
|
|
||||||
|
<!-- consequently, currying is supported -->
|
||||||
|
<variable name="result"
|
||||||
|
select="f:apply( f:apply( $partial, 4 ), 5 )" />
|
||||||
|
|
||||||
|
<!-- equiv = true() -->
|
||||||
|
<variable name="equiv"
|
||||||
|
select="$result
|
||||||
|
= f:apply( my:arity5(), 1, 2, 3, 4, 5 )
|
||||||
|
= my:arity5( 1, 2, 3, 4, 5 )" />
|
||||||
|
```
|
||||||
|
|
||||||
|
The implementation of partial function applications avoids the
|
||||||
|
complexity and inaccuracies of [Novatchev's approach][nova-ho] by
|
||||||
|
using only sequences, allowing arguments to retain their type and
|
||||||
|
context.
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
This program is free software: you can redistribute it and/or modify it
|
This program is free software: you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by the Free
|
under the terms of the GNU General Public License as published by the Free
|
||||||
|
|
Loading…
Reference in New Issue