aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-01-20 15:25:07 -0500
committerGravatar Peter McGoron 2025-01-20 15:25:07 -0500
commit4b13877f205dc3910c027c98945b0670eeb2034e (patch)
tree2799c9e7efb4bcb5ec0070250e2005c1db37c29e /README.md
parentinsert and delete (diff)
xor
Diffstat (limited to 'README.md')
-rw-r--r--README.md45
1 files changed, 45 insertions, 0 deletions
diff --git a/README.md b/README.md
index 416199b..4ebc63d 100644
--- a/README.md
+++ b/README.md
@@ -4,3 +4,48 @@
[Parallel Ordered Sets Using Join][1].
[1]: https://arxiv.org/abs/1602.02120
+
+Benefits of using this library:
+
+* Written in modern Scheme (R7RS).
+* Low level access to implementation using
+ `(mcgoron weight-balanced-trees internal)` library.
+* Implements interface for mapping and set SRFIs.
+* Interfaces with other SRFIs, like generators and streams.
+* Order can be defined on finite sets of ordered elements.
+* Extensively tested using [property testing][2] (like QuickCheck).
+* Permissive license (Apache 2.0)
+
+[2]: https://srfi.schemers.org/srfi-252/srfi-252.html
+
+## Included Libraries
+
+* `(mcgoron weight-balanced-trees internal)`: low-level operations on tree
+ nodes. Includes `join`, `split`, and binary set operations.
+* `(mcgoron weight-balanced-trees srfi 113 set)`: The set operations from
+ [SRFI-113][5], with extra procedures.
+
+[5]: https://srfi.schemers.org/srfi-113/srfi-113.html
+
+## Implementation Notes
+
+Tests of set operations are implemented in terms of the SRFI-1 list-set
+operations.
+
+The implementation of the SRFI interfaces uses [generators][3] for
+iteration whenever a function can terminate in the middle of a set (like
+`set-every?`). Generators are usually lightweight, but are intrinsically
+mutating. Some Scheme implementations, like CHICKEN, implement
+write-barriers in their garbage collectors, which make mutation slower
+(See ["Mutations"][4]).
+
+Alternative implementation strategies include:
+
+* escape continuations (`call/cc` might be slow, `call/ec` is not
+ standard, `guard` could be used to emulate escape continuations)
+* direct recursion (would have to traverse the whole set before
+ terminating)
+* sentinel-value return (uglier)
+
+[3]: https://srfi.schemers.org/srfi-158/srfi-158.html
+[4]: https://www.more-magic.net/posts/internals-gc.html
1f49563cb3e5a23f14f4bb7?s=13&d=retro' width='13' height='13' alt='Gravatar' /> anonymous 1-1/+1 2002-12-20dmaas - renamed exported arm definitions into the raw1394_ namespace; brought...Gravatar anonymous 3-124/+48 2002-12-16rawiso updates:Gravatar dmaas 3-18/+25 2002-11-18fix cplusplus extern C blockGravatar ddennedy 1-4/+4 2002-11-18merged rawiso branchGravatar ddennedy 7-6/+488