From c433382563586b3be40bd7c26223b6e77fc75b96 Mon Sep 17 00:00:00 2001 From: Timothy Sample Date: Sat, 12 Aug 2023 14:30:13 -0600 Subject: [PATCH] compat: Improve 'string-any' and 'string-every'. * gash/compat.scm [mes] (string-every): Add optional 'start' and 'end' arguments. [mes] (string-any): Likewise. --- gash/compat.scm | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gash/compat.scm b/gash/compat.scm index 41c6544..bca76b0 100644 --- a/gash/compat.scm +++ b/gash/compat.scm @@ -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))