I expanded on this theme in a blog post:
http://programming-puzzler.blogspot.com/2010/07/translating-code-from-python-and-scheme.html
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note th
On Sat, Jul 24, 2010 at 9:07 AM, Gary Fredericks
wrote:
> (defn remove-first
> [syb lst]
> (let [[before after]
> (loop [b [] a lst]
> (if (empty? lst)
> [b a]
> (if (= syb (first a))
> [b (rest a)]
> (recur (con
Well obviously if you can get something to be tail-recursive you won't have
the stack overflows, and the thing in your code that prevents tail recursion
is having to cons the result of the recursive call. So let's try this:
(defn remove-first
[syb lst]
(let [[before after]
(loop [b [
@Randy Hudson
Really like that solution.
@Mark Engelberg
Thanks for the explanation
On Jul 25, 4:33 am, ataggart wrote:
> To add one small addendum to Mark's excellent comment, if you use lazy-
> seq then you don't need to worry about the nil from when
>
> On Jul 24, 12:01 pm, Mark Engelberg w
To add one small addendum to Mark's excellent comment, if you use lazy-
seq then you don't need to worry about the nil from when
On Jul 24, 12:01 pm, Mark Engelberg wrote:
> On Sat, Jul 24, 2010 at 11:45 AM, Mark Engelberg
>
> wrote:
> > The simplest translation is to wrap a lazy-seq around the
On Sat, Jul 24, 2010 at 11:45 AM, Mark Engelberg
wrote:
> The simplest translation is to wrap a lazy-seq around the last line to
> avoid the stack overflows.
Just to clarify, there are at least three reasonable places to place
the call to lazy-seq. You can put lazy-seq around the full body of
th
The simplest translation is to wrap a lazy-seq around the last line to
avoid the stack overflows.
On Sat, Jul 24, 2010 at 8:41 AM, nickikt wrote:
> (defn scheme-remove-first [syb lst]
> (if (empty? lst)
> '()
> (if (= (first lst) syb)
> (rest lst)
> (cons (first lst) (scheme-remo
Hi,
One way to prevent the stack overflows is to wrap it in a lazy seq.
For example:
(defn remove-first [x coll]
(lazy-seq
(when (seq coll)
(let [[y & ys] coll]
(if (= target y)
ys
(cons y (remove-first x ys)))
On Saturday 24 July 2010 11
Here's my take:
(defn remove-first [x coll]
(let [[pre post] (split-with #(not= x %) coll)]
(concat (pre (rest post
On Jul 24, 11:41 am, nickikt wrote:
> Hallo all,
>
> I'm working trough Essentials of Programming Languages. I'm trying to
> right a function like this one:
>
> (defn sch
Hallo all,
I'm working trough Essentials of Programming Languages. I'm trying to
right a function like this one:
(defn scheme-remove-first [syb lst]
(if (empty? lst)
'()
(if (= (first lst) syb)
(rest lst)
(cons (first lst) (scheme-remove-first syb (rest lst))
in a idiom
10 matches
Mail list logo