aboutsummaryrefslogtreecommitdiffstats
path: root/csc/strings.csc
diff options
context:
space:
mode:
Diffstat (limited to 'csc/strings.csc')
-rw-r--r--csc/strings.csc23
1 files changed, 21 insertions, 2 deletions
diff --git a/csc/strings.csc b/csc/strings.csc
index 737c91b..0259697 100644
--- a/csc/strings.csc
+++ b/csc/strings.csc
@@ -1,14 +1,17 @@
(define-library (csc strings)
(export
+ contains
find
join
not-found-error?
prefix?
+ split
str-quote)
(import (scheme base)
(only (scheme case-lambda) case-lambda)
(only (scheme write) write)
- (only (csc list) intercalate))
+ (only (csc list) intercalate)
+ (only (csc loop) loop))
(begin
@@ -42,5 +45,21 @@
(else (loop (+ 1 i))))))))
+ (define (contains s substr)
+ (if (string=? "" substr)
+ #t
+ (guard (e ((not-found-error? e) #f))
+ (find substr s)
+ #t)))
+
+
(define (join sep . strings)
- (apply string-append (intercalate sep strings)))))
+ (apply string-append (intercalate sep strings)))
+
+
+ (define (split s sep)
+ (loop for s* = s then (string-copy s* (+ i (string-length sep)))
+ for i = (guard (e ((not-found-error? e) (string-length s*)))
+ (find sep s*))
+ collect (substring s* 0 i)
+ while (< i (string-length s*))))))