Changeset 18924 in project
- Timestamp:
- 07/22/10 01:00:42 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
release/4/combinators/trunk/section-combinators.scm
r18923 r18924 5 5 6 6 (;export 7 left-section 8 right-section 9 crop-left 10 crop-right 7 left-section right-section 8 crop-left crop-right 11 9 reversed 12 10 identities 13 apply@ 14 apply* 15 combine@ 16 combine* 17 ) 11 chained-apply 12 apply-each apply-all 13 combine-each combine-all 14 uni uni2 uni3 uni-each uni-all 15 bi bi2 bi3 bi-each bi-all 16 tri tri2 tri3 tri-each tri-all) 18 17 19 18 (import 20 19 scheme 21 20 chicken 22 srfi-1)21 (only srfi-1 drop drop-right)) 23 22 24 23 (require-library srfi-1) … … 33 32 (crop-right (procedure ((procedure (#!rest) *) fixnum) (procedure (#!rest) *))) ) ) 34 33 35 ;; ;34 ;; 36 35 37 36 (define (left-section proc . args) … … 48 47 49 48 (define (reversed proc) 50 (lambda xs (##sys#apply proc (reverse xs))) )49 (lambda xs (##sys#apply proc (reverse xs))) ) 51 50 52 51 (define (identities . xs) xs) … … 54 53 ;; 55 54 56 (define (apply@ proc . procs) 55 (define chained-apply 56 (case-lambda 57 ((proc1 proc2 proc3 . procs) 58 (let ((procs (reverse (##sys#append (list proc1 proc2 proc3) procs)))) 59 (lambda xs 60 (let loop ((res xs) (procs procs)) 61 (if (null? procs) res 62 (loop (##sys#apply (car procs) res) (cdr procs)) ) ) ) ) ) 63 ((proc1 proc2 proc3) 64 (lambda xs (##sys#apply proc1 (##sys#apply proc2 (##sys#apply proc3 xs)))) ) 65 ((proc1 proc2) 66 (lambda xs (##sys#apply proc1 (##sys#apply proc2 xs))) ) 67 ((proc1) 68 (lambda xs (##sys#apply proc1 xs)) ) 69 (() 70 identities ) ) ) 71 72 ;; 73 74 (define (apply-each proc . procs) 57 75 (if (null procs) 58 76 (lambda xs (##sys#list (##sys#map proc xs))) 59 77 (let ((procs (##sys#append (##sys#list proc) procs))) 60 (lambda xs ( ##sys#map (lambda (f x) (f x)) procs xs)) ) ) )78 (lambda xs (map (lambda (f x) (f x)) procs xs)) ) ) ) 61 79 62 (define (apply *proc . procs)80 (define (apply-all proc . procs) 63 81 (if (null procs) 64 82 (lambda xs (##sys#list (##sys#apply proc xs))) … … 68 86 ;; 69 87 70 (define combine @88 (define combine-each 71 89 (case-lambda 72 90 ((comb proc . procs) 73 (let ((reducer (##sys#apply apply@ proc procs))) 74 (lambda xs (##sys#apply comb (##sys#apply reducer xs)))) ) 91 (chained-apply comb (##sys#apply apply-each proc procs)) ) 75 92 ((comb) 76 (lambda procs (##sys#apply combine @comb procs)) )93 (lambda procs (##sys#apply combine-each comb procs)) ) 77 94 (() 78 (lambda (comb) (combine @comb)) ) ) )95 (lambda (comb) (combine-each comb)) ) ) ) 79 96 80 (define combine *97 (define combine-all 81 98 (case-lambda 82 99 ((comb proc . procs) 83 (let ((reducer (##sys#apply apply* procs))) 84 (lambda xs (##sys#apply proc (##sys#apply reducer xs)))) ) 100 (chained-apply comb (##sys#apply apply-all proc procs)) ) 85 101 ((comb) 86 (lambda procs (##sys#apply combine *comb procs)) )102 (lambda procs (##sys#apply combine-all comb procs)) ) 87 103 (() 88 (lambda (comb) (combine *comb)) ) ) )104 (lambda (comb) (combine-all comb)) ) ) ) 89 105 90 106 ;; … … 108 124 (() (lambda (c) (uni3 c))))) 109 125 110 (define uni@ ; for completeness only 111 (case-lambda 112 ((c f) (lambda (x) (c (f x)))))) 126 (define (uni-each c f) 127 (lambda (x) (c (f x))) ) 113 128 114 (define uni* 115 (case-lambda 116 ((c f) (lambda xs (c (##sys#apply f xs)))))) 129 (define (uni-all c f) 130 (lambda xs (c (##sys#apply f xs))) ) 117 131 118 132 ;; … … 139 153 (() (lambda (c) (bi3 c))))) 140 154 141 (define bi@ 142 (case-lambda 143 ((c f) (lambda (x y) (c (f x) (f y)))))) 155 (define (bi-each c f) 156 (lambda (x y) (c (f x) (f y))) ) 144 157 145 (define bi* 146 (case-lambda 147 ((c f g) (lambda xs (c (##sys#apply f xs) (##sys#apply g xs)))))) 158 (define (bi-all c f g) 159 (lambda xs (c (##sys#apply f xs) (##sys#apply g xs))) ) 148 160 149 161 ;; … … 170 182 (() (lambda (c) (tri3 c))))) 171 183 172 (define tri@ 173 (case-lambda 174 ((c f) (lambda (x y z) (c (f x) (f y) (f z)))))) 184 (define (tri-each c f) 185 (lambda (x y z) (c (f x) (f y) (f z))) ) 175 186 176 (define tri* 177 (case-lambda 178 ((c f g h) (lambda xs (c (##sys#apply f xs) (##sys#apply g xs) (##sys#apply h xs)))))) 187 (define (tri-all c f g h) 188 (lambda xs (c (##sys#apply f xs) (##sys#apply g xs) (##sys#apply h xs))) ) 179 189 180 190 ) ;module section-combinators
Note: See TracChangeset
for help on using the changeset viewer.