From Newsgroup: comp.lang.lisp
B. Pym wrote:
(defun split-if (fn lst)
(let ((acc nil))
(do ((src lst (cdr src)))
((or (null src) (funcall fn (car src)))
(values (nreverse acc) src))
(push (car src) acc))))
Scheme
(define (split-if fn lst)
(do ((src lst (cdr src))
(acc '() (cons (car src) acc)))
((or (null? src) (fn (car src)))
(values (reverse acc) src))))
(split-if odd? '(0 2 4 5 7))
===>
(0 2 4)
(5 7)
(split-if odd? '(0 2 4 52 70))
===>
(0 2 4 52 70)
()
(split-if odd? '(3 0 2 4 52 70))
===>
()
(3 0 2 4 52 70)
(use srfi-1) ;; break
(break odd? '(0 2 4 5 7))
===>
'(0 2 4)
'(5 7)
--- Synchronet 3.21d-Linux NewsLink 1.2