aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonrad Hinsen <konrad.hinsen@laposte.net>2009-02-15 22:04:30 +0000
committerKonrad Hinsen <konrad.hinsen@laposte.net>2009-02-15 22:04:30 +0000
commitab67c84237f052fea57d7cbfc45d7908026f46fa (patch)
tree21757506115ff02b6ee257532e48e3bfb914effe
parent742d0143421335f7eea6ca858efe9af576ec8f6a (diff)
monads: fixes to make it work with the lazy branch
-rw-r--r--src/clojure/contrib/monads.clj4
-rw-r--r--src/clojure/contrib/monads/examples.clj16
2 files changed, 15 insertions, 5 deletions
diff --git a/src/clojure/contrib/monads.clj b/src/clojure/contrib/monads.clj
index 7fcac162..7f328440 100644
--- a/src/clojure/contrib/monads.clj
+++ b/src/clojure/contrib/monads.clj
@@ -1,7 +1,7 @@
;; Monads in Clojure
;; by Konrad Hinsen
-;; last updated February 14, 2009
+;; last updated February 15, 2009
;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use
;; and distribution terms for this software are covered by the Eclipse
@@ -169,7 +169,7 @@
(reduce (fn [q p]
(m-bind p (fn [x]
(m-bind q (fn [y]
- (m-result (lazy-cons x y)))) )))
+ (m-result (cons x y)))) )))
(m-result '())
(reverse ms)))
diff --git a/src/clojure/contrib/monads/examples.clj b/src/clojure/contrib/monads/examples.clj
index 98ffaecd..54748d74 100644
--- a/src/clojure/contrib/monads/examples.clj
+++ b/src/clojure/contrib/monads/examples.clj
@@ -7,6 +7,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(ns clojure.contrib.monads.examples
+ (:use [clojure.contrib.macros :only (lazy-and-standard-branch)])
(:use clojure.contrib.monads)
(:require (clojure.contrib [accumulators :as accu])))
@@ -150,9 +151,18 @@
; We define a convenience function that creates an infinite lazy seq
; of values obtained from iteratively applying a state monad value.
-(defn value-seq [f seed]
- (let [[value next] (f seed)]
- (lazy-cons value (value-seq f next))))
+(lazy-and-standard-branch
+
+ (defn value-seq [f seed]
+ (lazy-seq
+ (let [[value next] (f seed)]
+ (cons value (value-seq f next)))))
+
+ (defn value-seq [f seed]
+ (let [[value next] (f seed)]
+ (lazy-cons value (value-seq f next))))
+
+)
; Next, we define basic statistics functions to check our random numbers
(defn sum [xs] (apply + xs))