mes: Add string-contains.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:21:52 +0000 (18:21 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:21:52 +0000 (18:21 +0200)
* module/srfi/srfi-13.mes (string-contains): New function.
* tests/srfi-13.test ("string-contains"): Test it.
  ("string-contains not"):

module/srfi/srfi-13.mes
tests/srfi-13.test

index 859e51601e1cf199aedde5bab153efb52aec370c..01765d4007b6aab0bb8832a573c924be94739f99 100644 (file)
     (let loop ((lst (reverse (string->list s))) (prev nil'))
       (if (null? lst) prev
           (loop (cdr lst) (cons' (car lst) prev))))))
+
+(define (string-contains string needle)
+  (let ((needle (string->list needle)))
+    (let loop ((string (string->list string)) (i 0))
+      (and (pair? string)
+           (let match ((start string) (needle needle) (n i))
+             (if (null? needle) i
+                 (and (pair? start)
+                      (if (eq? (car start) (car needle))
+                          (or (match (cdr start) (cdr needle) (1+ n))
+                              (loop (cdr string) (1+ i)))
+                          (loop (cdr string) (1+ i))))))))))
index 1e6a98514e4b4b50e9d161186c89394fbc88c921..d7f5f892d83e72c34b408c1527aabb1b92577519 100755 (executable)
@@ -62,4 +62,10 @@ exit $?
 (pass-if-equal "string-drop-right" "foo"
   (string-drop-right "foobar" 3))
 
+(pass-if-equal "string-contains" 3
+  (string-contains "foobar" "bar"))
+
+(pass-if-not "string-contains not"
+             (string-contains "fuba" "bar"))
+
 (result 'report)