aboutsummaryrefslogtreecommitdiff
path: root/module/util.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2019-04-23 21:28:40 +0200
committerHugo Hörnquist <hugo@hornquist.se>2019-04-23 22:48:15 +0200
commit11f83cf1e3a179d3442ce5610a69483fececffb2 (patch)
tree77f6341e65cfc36e71f9d715a1fa4fe919780ef9 /module/util.scm
parentAdd ability to set start-date of term mode. (diff)
downloadcalp-11f83cf1e3a179d3442ce5610a69483fececffb2.tar.gz
calp-11f83cf1e3a179d3442ce5610a69483fececffb2.tar.xz
Replace text-flow function.
Diffstat (limited to 'module/util.scm')
-rw-r--r--module/util.scm22
1 files changed, 20 insertions, 2 deletions
diff --git a/module/util.scm b/module/util.scm
index 8abf6877..01d2eeb1 100644
--- a/module/util.scm
+++ b/module/util.scm
@@ -153,8 +153,10 @@
;; Still requires all variables to be defined beforehand.
(define-syntax set!
(syntax-rules ()
- ((_ field val)
- ((@ (guile) set!) field val))
+ ((_ field expr)
+ (let ((val expr))
+ ((@ (guile) set!) field val)
+ val))
((_ field val rest ...)
(begin ((@ (guile) set!) field val)
(set! rest ...)))))
@@ -289,3 +291,19 @@
(define-macro (catch-multiple thunk . cases)
(catch-recur% (map car cases) thunk cases))
+(define-public (flatten lst)
+ (fold (lambda (subl done)
+ (append done ((if (list? subl) flatten list) subl)))
+ '() lst))
+
+;; Retuns two values. The longset head which satisfies @var{pred?},
+;; and the rest of the elements of list.
+;; Guarentees to only call @var{pred?} once for each element.
+(define-public (take-drop-while pred? list)
+ (let loop ((done '()) (rem list))
+ (cond ((null? rem) (values (reverse done) '()))
+ ((pred? (car rem)) (loop (cons (car rem) done) (cdr rem)))
+ (else (values (reverse done) rem)))))
+
+
+