summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2015-10-09 12:10:47 -0400
committerDavid Thompson <dthompson2@worcester.edu>2015-10-09 12:17:01 -0400
commitbbd00d2012833c6419a62f6490cbef3e896b1e11 (patch)
tree6a5042c85949122419ff91e38455131eed04336b /guix
parentb94ef11a538e19900c1f570500ac4dee73543844 (diff)
utils: Add split procedure.
* guix/utils.scm (split): New procedure. * tests/utils.scm: Add tests.
Diffstat (limited to 'guix')
-rw-r--r--guix/utils.scm19
1 files changed, 19 insertions, 0 deletions
diff --git a/guix/utils.scm b/guix/utils.scm
index 1d4b2ff9b0..0802a1b67a 100644
--- a/guix/utils.scm
+++ b/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.