mes: Support predicate with string-index.
authorJan Nieuwenhuizen <janneke@gnu.org>
Thu, 18 May 2017 22:51:23 +0000 (00:51 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Thu, 18 May 2017 22:51:23 +0000 (00:51 +0200)
* module/srfi/srfi-13.mes (string-index): Support predicate.

module/srfi/srfi-13.mes

index 98b2d667be85ae868089c26a52963e4530be8456..9579854d1405e1fbe67948a3557448bddb9c9d9f 100644 (file)
 
 (define (string-index s pred . rest)
   (let* ((start (and (pair? rest) (car rest)))
-         (end (and start (pair? (cdr rest)) (cadr rest))))
-    (if (not (char? pred)) (error "string-index: not supported: pred=" pred))
+         (end (and start (pair? (cdr rest)) (cadr rest)))
+         (pred (if (char? pred) (lambda (c) (eq? c pred)) pred)))
     (if start (error "string-index: not supported: start=" start))
     (if end (error "string-index: not supported: end=" end))
     (let loop ((lst (string->list s)) (i 0))
       (if (null? lst) #f
-          (if (eq? (car lst) pred) i
+          (if (pred (car lst)) i
               (loop (cdr lst) (1+ i)))))))