diff options
author | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-02-15 22:04:30 +0000 |
---|---|---|
committer | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-02-15 22:04:30 +0000 |
commit | ab67c84237f052fea57d7cbfc45d7908026f46fa (patch) | |
tree | 21757506115ff02b6ee257532e48e3bfb914effe | |
parent | 742d0143421335f7eea6ca858efe9af576ec8f6a (diff) |
monads: fixes to make it work with the lazy branch
-rw-r--r-- | src/clojure/contrib/monads.clj | 4 | ||||
-rw-r--r-- | src/clojure/contrib/monads/examples.clj | 16 |
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)) |