diff options
author | Hugo Hörnquist <hugo@hornquist.se> | 2019-04-23 21:28:40 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@hornquist.se> | 2019-04-23 22:48:15 +0200 |
commit | 11f83cf1e3a179d3442ce5610a69483fececffb2 (patch) | |
tree | 77f6341e65cfc36e71f9d715a1fa4fe919780ef9 /module/util | |
parent | Add ability to set start-date of term mode. (diff) | |
download | calp-11f83cf1e3a179d3442ce5610a69483fececffb2.tar.gz calp-11f83cf1e3a179d3442ce5610a69483fececffb2.tar.xz |
Replace text-flow function.
Diffstat (limited to '')
-rw-r--r-- | module/util.scm | 22 |
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))))) + + + |