aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2020-04-21 00:26:11 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2020-04-22 18:24:14 +0200
commitae7119045e6fae803086000ccd2b54b90f52aa85 (patch)
tree74928e97c9e521f43374d961a1eb15c4c72191ba
parentRemove define-quick-record macros. (diff)
downloadcalp-ae7119045e6fae803086000ccd2b54b90f52aa85.tar.gz
calp-ae7119045e6fae803086000ccd2b54b90f52aa85.tar.xz
Add iterate procedure.
-rw-r--r--module/util.scm8
1 files changed, 8 insertions, 0 deletions
diff --git a/module/util.scm b/module/util.scm
index 474c7589..4981bb9a 100644
--- a/module/util.scm
+++ b/module/util.scm
@@ -463,6 +463,14 @@
(let* ((row rest (split-at list width)))
(cons row (group rest width)))))
+;; repeatedly apply proc to base unitl @var{until} is satisfied.
+;; (a → a), (a → bool), a → a
+(define-public (iterate proc until base)
+ (let loop ((o base))
+ (if (until o)
+ o
+ (loop (proc o)))))
+
(define-syntax let-env