diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-06-17 17:33:28 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-06-17 17:33:28 +0200 |
commit | cd4c747fb8cd6c65f18471aad54427d87b884ebc (patch) | |
tree | 08423f26595d6f1aa5e5ca44576e9930e15e243c /module/srfi/srfi-1.scm | |
parent | 0360843acee98f26598d8f77eda880a03ea3be93 (diff) | |
download | guile-cd4c747fb8cd6c65f18471aad54427d87b884ebc.tar.gz |
srfi-1: Rewrite 'find-tail' in Scheme.
* libguile/srfi-1.c (scm_srfi1_find_tail): Remove.
* libguile/srfi-1.h (scm_srfi1_find_tail): Likewise.
* module/srfi/srfi-1.scm (find-tail): New procedure.
Diffstat (limited to 'module/srfi/srfi-1.scm')
-rw-r--r-- | module/srfi/srfi-1.scm | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/module/srfi/srfi-1.scm b/module/srfi/srfi-1.scm index e5b28e777..1fc7a0e26 100644 --- a/module/srfi/srfi-1.scm +++ b/module/srfi/srfi-1.scm @@ -731,6 +731,17 @@ the list returned." head (loop (cdr lst))))))) +(define (find-tail pred lst) + "Return the first pair of @var{lst} whose @sc{car} satisfies the +predicate @var{pred}, or return @code{#f} if no such element is found." + (check-arg procedure? pred find) + (let loop ((lst lst)) + (and (not (null? lst)) + (let ((head (car lst))) + (if (pred head) + lst + (loop (cdr lst))))))) + (define (take-while pred ls) "Return a new list which is the longest initial prefix of LS whose elements all satisfy the predicate PRED." |