From 24631a8cf26091bacf138e68a165c8502c217c44 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Wed, 18 May 2011 01:03:16 -0700 Subject: [PATCH] moving generalized every/any from srfi-1 to init --- lib/init.scm | 19 +++++++++++++++---- lib/srfi/1/search.scm | 15 +-------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/lib/init.scm b/lib/init.scm index a6f39246..1f2e4f39 100644 --- a/lib/init.scm +++ b/lib/init.scm @@ -89,11 +89,22 @@ (define (for1 f ls) (if (pair? ls) (begin (f (car ls)) (for1 f (cdr ls))))) (if (null? lol) (for1 f ls) (begin (apply map f ls lol) (if #f #f)))) -(define (any pred ls) - (if (pair? ls) (if (pred (car ls)) (car ls) (any pred (cdr ls))) #f)) +(define (any pred ls . lol) + (define (any1 pred ls) + (if (pair? ls) (if (pred (car ls)) (car ls) (any1 pred (cdr ls))) #f)) + (define (anyn pred lol) + (if (every pair? lol) + ((lambda (args) (if (apply pred args) args (anyn pred (map cdr lol)))) + (map car lol)) + #f)) + (if (null? lol) (any1 pred ls) (anyn pred (cons ls lol)))) -(define (every pred ls) - (if (pair? ls) (if (pred (car ls)) (every pred (cdr ls)) #f) #t)) +(define (every pred ls . lol) + (define (every1 pred ls) + (if (pair? ls) (if (pred (car ls)) (every1 pred (cdr ls)) #f) #t)) + (if (null? lol) + (every1 pred ls) + (not (apply any (lambda (x) (not (pred x))) ls lol)))) (define (delq x ls) (if (pair? ls) diff --git a/lib/srfi/1/search.scm b/lib/srfi/1/search.scm index ea31d931..3b6f2443 100644 --- a/lib/srfi/1/search.scm +++ b/lib/srfi/1/search.scm @@ -1,5 +1,5 @@ ;; search.scm -- list searching and splitting -;; Copyright (c) 2009 Alex Shinn. All rights reserved. +;; Copyright (c) 2009-2011 Alex Shinn. All rights reserved. ;; BSD-style license: http://synthcode.com/license.txt (define (find pred ls) @@ -31,19 +31,6 @@ (define break! break) -(define (any pred ls . lists) - (if (null? lists) - (let lp ((ls ls)) (and (pair? ls) (if (pred (car ls)) (car ls) (lp (cdr ls))))) - (let lp ((lists (cons ls lists))) - (and (every pair? lists) - (let ((args (map car lists))) - (if (apply pred args) args (lp (map cdr lists)))))))) - -(define (every pred ls . lists) - (if (null? lists) - (let lp ((ls ls)) (if (pair? ls) (and (pred (car ls)) (lp (cdr ls))) #t)) - (not (apply any (lambda (x) (not (pred x))) ls lists)))) - (define (list-index pred ls . lists) (if (null? lists) (let lp ((ls ls) (n 0))