Browse Source

utils: Add split procedure.

* guix/utils.scm (split): New procedure.
* tests/utils.scm: Add tests.
wip-container
David Thompson 7 years ago
parent
commit
bbd00d2012
  1. 19
      guix/utils.scm
  2. 14
      tests/utils.scm

19
guix/utils.scm

@ -3,6 +3,7 @@
;;; Copyright © 2013, 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -79,6 +80,7 @@
fold2
fold-tree
fold-tree-leaves
split
filtered-port
compressed-port
@ -684,6 +686,23 @@ are connected to NODE in the tree, or '() or #f if NODE is a leaf node."
(else result)))
init children roots))
(define (split lst e)
"Return two values, a list containing the elements of the list LST that
appear before the first occurence of the object E and a list containing the
elements after E."
(define (same? x)
(equal? e x))
(let loop ((rest lst)
(acc '()))
(match rest
(()
(values lst '()))
(((? same?) . tail)
(values (reverse acc) tail))
((head . tail)
(loop tail (cons head acc))))))
;;;
;;; Source location.

14
tests/utils.scm

@ -121,6 +121,20 @@
'(0 1 2 3)))
list))
(test-equal "split, element is in list"
'((foo) (baz))
(call-with-values
(lambda ()
(split '(foo bar baz) 'bar))
list))
(test-equal "split, element is not in list"
'((foo bar baz) ())
(call-with-values
(lambda ()
(split '(foo bar baz) 'quux))
list))
(test-equal "strip-keyword-arguments"
'(a #:b b #:c c)
(strip-keyword-arguments '(#:foo #:bar #:baz)

Loading…
Cancel
Save