From 789f0c5ce78a0ff5e785b4988f8dde104f84257f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 10 Sep 2023 17:09:55 +0200 Subject: Expose eager-stream-cons. --- module/srfi/srfi-41/util.scm | 1 + 1 file changed, 1 insertion(+) (limited to 'module/srfi/srfi-41') diff --git a/module/srfi/srfi-41/util.scm b/module/srfi/srfi-41/util.scm index 16bf1da6..cecbb3b3 100644 --- a/module/srfi/srfi-41/util.scm +++ b/module/srfi/srfi-41/util.scm @@ -5,6 +5,7 @@ :use-module ((ice-9 sandbox) :select (call-with-time-limit)) :use-module ((hnh util) :select (find-extreme)) :export (stream-car+cdr + eager-stream-cons interleave-streams stream-insert filter-sorted-stream -- cgit v1.2.3 From 634502e7246f8850ad6c649b79ae9f072f45baf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 11 Sep 2023 17:54:35 +0200 Subject: Introduce stream-split-by. This procedure isn't currently used, but as noted is really useful for grouping a character stream into a word stream, which is a later commit will use for it for justifying posibly infinite streams of text. --- module/srfi/srfi-41/util.scm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'module/srfi/srfi-41') diff --git a/module/srfi/srfi-41/util.scm b/module/srfi/srfi-41/util.scm index cecbb3b3..1571cc4c 100644 --- a/module/srfi/srfi-41/util.scm +++ b/module/srfi/srfi-41/util.scm @@ -18,7 +18,8 @@ stream-partition stream-split stream-paginate - stream-timeslice-limit)) + stream-timeslice-limit + stream-split-by)) (define (stream-car+cdr stream) (values (stream-car stream) @@ -146,3 +147,15 @@ (stream-timeslice-limit (stream-cdr strm) timeslice))) (lambda _ stream-null))) + +(define-stream (stream-split-by pred strm) + (let loop ((accumulated '()) + (strm strm)) + (stream-match strm + (() (if (null? accumulated) + stream-null + (stream (reverse accumulated)))) + ((x . xs) (pred x) + (stream-cons (reverse (cons x accumulated)) (loop '() xs))) + ((x . xs) + (loop (cons x accumulated) xs))))) -- cgit v1.2.3