aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/stream_utils.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/stream_utils.clj')
-rw-r--r--src/clojure/contrib/stream_utils.clj43
1 files changed, 21 insertions, 22 deletions
diff --git a/src/clojure/contrib/stream_utils.clj b/src/clojure/contrib/stream_utils.clj
index 3ba04e69..c2bdc101 100644
--- a/src/clojure/contrib/stream_utils.clj
+++ b/src/clojure/contrib/stream_utils.clj
@@ -1,7 +1,7 @@
;; Stream utilities
;; by Konrad Hinsen
-;; last updated February 23, 2009
+;; last updated March 2, 2009
;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use
;; and distribution terms for this software are covered by the Eclipse
@@ -52,8 +52,7 @@
whereas pick-all returns the next value of all stream arguments
in the form of a vector."
- (:use [clojure.contrib.monads])
- (:use [clojure.contrib.macros :only (letfn-kh)]))
+ (:use [clojure.contrib.monads :only (defmonad with-monad)]))
(let [eos (Object.)
@@ -150,13 +149,13 @@
stream-m monad) and a vector of stream arguments and returns a stream
generator function representing the output stream of the transformer."
[st streams]
- (letfn-kh [make-gen [s]
- (fn [eos]
- (loop [s s]
- (let [[v ns] (st s)]
- (cond (stream-eos? v) [eos nil]
- (stream-skip? v) (recur ns)
- :else [v (make-gen ns)]))))]
+ (letfn [(make-gen [s]
+ (fn [eos]
+ (loop [s s]
+ (let [[v ns] (st s)]
+ (cond (stream-eos? v) [eos nil]
+ (stream-skip? v) (recur ns)
+ :else [v (make-gen ns)])))))]
(make-gen streams)))
)
@@ -176,14 +175,14 @@
The non-stream arguments args and the stream arguments streams
are given separately, with args being possibly empty."
[name args streams & body]
- (defst 'st-as-seq name args streams body))
+ (defst `st-as-seq name args streams body))
(defmacro defst-gen
"Define the generator-returning stream transformer name by body.
The non-stream arguments args and the stream arguments streams
are given separately, with args being possibly empty."
[name args streams & body]
- (defst 'st-as-generator name args streams body))
+ (defst `st-as-generator name args streams body))
(defn stream-drop
"Return a stream containing all but the first n elements of stream."
@@ -207,15 +206,15 @@
sequences. Flattening is not recursive, only one level of sequences
will be removed."
[s]
- (letfn-kh [buffer-gen [buffer stream]
- (fn [eos]
- (loop [buffer buffer
- stream stream]
- (if (nil? buffer)
- (let [[v new-stream] (stream-next stream)]
- (cond (stream-eos? v) [eos nil]
- (empty? v) (recur nil new-stream)
- :else (recur v new-stream)))
- [(first buffer) (buffer-gen (next buffer) stream)])))]
+ (letfn [(buffer-gen [buffer stream]
+ (fn [eos]
+ (loop [buffer buffer
+ stream stream]
+ (if (nil? buffer)
+ (let [[v new-stream] (stream-next stream)]
+ (cond (stream-eos? v) [eos nil]
+ (empty? v) (recur nil new-stream)
+ :else (recur v new-stream)))
+ [(first buffer) (buffer-gen (next buffer) stream)]))))]
(buffer-gen nil s)))