mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
utils: Add split procedure.
* guix/utils.scm (split): New procedure. * tests/utils.scm: Add tests.
This commit is contained in:
parent
b94ef11a53
commit
bbd00d2012
2 changed files with 33 additions and 0 deletions
|
@ -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 @@ (define-module (guix utils)
|
|||
fold2
|
||||
fold-tree
|
||||
fold-tree-leaves
|
||||
split
|
||||
|
||||
filtered-port
|
||||
compressed-port
|
||||
|
@ -684,6 +686,23 @@ (define (fold-tree-leaves proc init children roots)
|
|||
(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.
|
||||
|
|
|
@ -121,6 +121,20 @@ (define temp-file
|
|||
'(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…
Reference in a new issue