-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathset.sld
99 lines (93 loc) · 3.14 KB
/
set.sld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
(define-library (schemepunk set)
(export
;;;;;;;;;;;;;; Sets
;; Constructors:
set set-contains? set-unfold
;; Predicates:
set? set-empty? set-disjoint?
;; Accessors:
set-member set-element-comparator
;; Updaters:
set-adjoin set-adjoin! set-replace set-replace!
set-delete set-delete! set-delete-all set-delete-all!
set-search!
;; The whole set:
set-size set-find set-count set-any? set-every?
;; Mapping and folding:
set-map set-for-each set-fold set-filter set-filter!
set-remove set-remove! set-partition set-partition!
;; Copying and conversion:
set-copy set->list list->set list->set!
;; Subsets:
set=? set<? set>? set<=? set>=?
;; Set theory operations:
set-union set-intersection set-difference set-xor
set-union! set-intersection! set-difference! set-xor!
;;;;;;;;;;;;;; Bags
;; Constructors:
bag bag-contains? bag-unfold
;; Predicates:
bag? bag-empty? bag-disjoint?
;; Accessors:
bag-member bag-element-comparator
;; Updaters:
bag-adjoin bag-adjoin! bag-replace bag-replace!
bag-delete bag-delete! bag-delete-all bag-delete-all!
bag-search!
;; The whole bag:
bag-size bag-find bag-count bag-any? bag-every?
;; Mapping and folding:
bag-map bag-for-each bag-fold bag-filter bag-filter!
bag-remove bag-remove! bag-partition bag-partition!
;; Copying and conversion:
bag-copy bag->list list->bag list->bag!
;; Subbags:
bag=? bag<? bag>? bag<=? bag>=?
;; Bag theory operations:
bag-union bag-intersection bag-difference bag-xor
bag-union! bag-intersection! bag-difference! bag-xor!
;; Additional bag procedures:
bag-unique-size
bag-sum bag-sum! bag-product bag-product! bag-element-count
bag-for-each-unique bag-fold-unique bag-increment! bag-decrement!
bag->set set->bag set->bag!
bag->alist alist->bag)
(import (scheme base)
(schemepunk syntax)
(schemepunk list)
(schemepunk show span)
(schemepunk show block)
(schemepunk show block datum))
(cond-expand
(chicken (import (srfi 113)))
((or (library (scheme set))
(library (srfi 113))
(library (std srfi 113)))
(export set-comparator bag-comparator)
(cond-expand
((library (scheme set)) (import (scheme set)))
((library (srfi 113)) (import (srfi 113)))
((library (std srfi 113)) (import (std srfi 113)))))
(else
(export
(rename the-set-comparator set-comparator)
(rename the-bag-comparator bag-comparator))
(import (schemepunk comparator)
(schemepunk hash-table))
(include "polyfills/sets.scm"
"polyfills/bags.scm")))
(begin
(define (set->block set)
(define color (datum-color-record))
(if (set-empty? set)
(make-block (list (text-span "#,(set)" color)))
(make-block
(list
(text-span "#,(set" color)
(whitespace-span))
(chain (set->list set)
(map datum->block _)
(intercalate (whitespace-span) _))
(list
(text-span ")" color)))))
(register-datum-writer! set? set->block)))