compat: Improve 'string-any' and 'string-every'.

* gash/compat.scm [mes] (string-every): Add optional 'start' and
'end' arguments.
[mes] (string-any): Likewise.
This commit is contained in:
Timothy Sample 2023-08-12 14:30:13 -06:00
parent ca36e71447
commit c433382563
1 changed files with 16 additions and 4 deletions

View File

@ -148,11 +148,23 @@
(define (string-for-each proc str)
(for-each proc (string->list str)))
(define (string-every pred str)
((@ (srfi srfi-1) every) (char-pred pred) (string->list str)))
(define* (string-every pred str #:optional (start 0)
(end (string-length str)))
(let ((pred (char-pred pred)))
(let loop ((k start))
(if (= k end)
#t
(and (pred (string-ref str k))
(loop (+ k 1)))))))
(define (string-any pred str)
((@ (srfi srfi-1) any) (char-pred pred) (string->list str)))
(define* (string-any pred str #:optional (start 0)
(end (string-length str)))
(let ((pred (char-pred pred)))
(let loop ((k start))
(and (< k end)
(if (pred (string-ref str k))
#t
(loop (+ k 1)))))))
(define the-eof-object (integer->char -1))