Add STREAM-LAST and STREAM-TRUNCATE. Fixed a typo.
authorjmarshall <jmarshall@jmarshall-glaptop2.roam.corp.google.com>
Sat, 16 Jan 2016 04:50:27 +0000 (20:50 -0800)
committerjmarshall <jmarshall@jmarshall-glaptop2.roam.corp.google.com>
Sat, 16 Jan 2016 04:50:27 +0000 (20:50 -0800)
src/runtime/runtime.pkg
src/runtime/stream.scm

index 4a9bdf35acf781c2cb9f32101621ca9ed9ff27b4..10a558c8cde408ad9f3d3585dc3e652511aa1705 100644 (file)
@@ -4606,6 +4606,7 @@ USA.
          stream-first
          stream-for-each
          stream-head
+         stream-last
          stream-last-pair
          stream-length
          stream-map
@@ -4614,6 +4615,7 @@ USA.
          stream-ref
          stream-rest
          stream-tail
+         stream-truncate
          stream-write
          tail
          the-empty-stream)
index 31da2be30b4c9a513c363aeaa2cd7e926bc9660e..6c49ebc356382c8e0dfe5072b0e484438e006b6e 100644 (file)
@@ -90,6 +90,9 @@ USA.
          (loop (force (cdr stream)) (- index 1)))
        stream)))
 
+(define (stream-last stream)
+  (stream-car (stream-last-pair stream)))
+
 (define (stream-last-pair stream)
   (if (not (stream-pair? stream))
       (if (null? stream)
@@ -100,7 +103,7 @@ USA.
       (if (stream-pair? next)
          (loop next)
          (begin
-           (if (not (null? stream))
+           (if (not (null? next))
                (error:illegal-stream-element stream 'STREAM-LAST-PAIR 0))
            stream)))))
 \f
@@ -223,6 +226,17 @@ USA.
            (error:illegal-stream-element stream 'STREAM-FILTER 1))
        '())))
 
+(define (stream-truncate stream predicate)
+  (if (stream-pair? stream)
+      (if (predicate (head stream))
+         the-empty-stream
+         (cons-stream (head stream)
+                      (stream-truncate (tail stream) predicate)))
+      (begin
+       (if (not (null? stream))
+           (error:illegal-stream-element stream 'STREAM-TRUNCATE 1))
+       '())))
+
 (define (stream-write stream #!optional port)
   (let ((port
         (if (default-object? port)