diff --git a/gash/compat.scm b/gash/compat.scm index 05321c3..4b1eb18 100644 --- a/gash/compat.scm +++ b/gash/compat.scm @@ -18,6 +18,7 @@ (define-module (gash compat) #:use-module (ice-9 match) + #:use-module (srfi srfi-14) #:export (if-guile-version-below when-mes)) @@ -85,7 +86,9 @@ make-parameter parameterize set-port-line! + string-concatenate-reverse string-every + string-any the-eof-object noop make-prompt-tag @@ -123,8 +126,21 @@ (define (set-port-line! port line) #f) + (define (string-concatenate-reverse lst) + (apply string-append (reverse lst))) + + (define (char-pred pred) + (cond + ((char? pred) (lambda (x) (char=? x pred))) + ((char-set? pred) (lambda (x) (char-set-contains? pred x))) + ((procedure? pred) pred) + (else (error "Invalid character predicate.")))) + (define (string-every pred str) - ((@ (srfi srfi-1) every) pred (string->list str))) + ((@ (srfi srfi-1) every) (char-pred pred) (string->list str))) + + (define (string-any pred str) + ((@ (srfi srfi-1) any) (char-pred pred) (string->list str))) (define the-eof-object (integer->char -1))