Op dinsdag 6 mei 2014 12:40:24 UTC+2 schreef James Reeves: > > Well, == should be =, but more importantly you're mixing up number and > counter. > > Step through your code one bit at a time: > > 1. You set number to 0 > 2. You set counter to (count coll) - 2 > 3. If number and counter are not equal... > 4. Recur with the next part of the list, and set the counter to (+ number > 1) > > See how you've got counter and number mixed up? >
Yep, So I change it to this : (defn secondlast [coll] (let [number 0 ] (loop [coll coll counter (- (count coll)2)] (if (= counter number) (first coll) (recur (next coll) (+ number 1)))))) But when I do (secondlast (list 1 2 3 4 5)) I still do not get a answer, Roelof > - James > > > On 6 May 2014 11:24, Roelof Wobben <rwo...@hotmail.com <javascript:>>wrote: > >> I changed everything to this : >> >> (ns forclojure.core) >> (defn secondlast [coll] >> (let [number 0 ] >> (loop [coll coll counter (- (count coll)2)] >> >> (if (== counter number) >> (first coll) >> (recur (next coll) (+ number 1)))))) >> >> >> But now I get a loop which never ends. >> >> Roelof >> >> >> Op dinsdag 6 mei 2014 10:51:09 UTC+2 schreef Roelof Wobben: >> >>> >>> >>> Op dinsdag 6 mei 2014 10:43:40 UTC+2 schreef Benjamin R. Haskell: >>>> >>>> `loop` expects a vector of binding forms (with initial values), not >>>> just a vector of names. >>>> >>>> (loop [coll counter] ; means there is one `loop` binding named >>>> `coll`, with the initial value of `counter` >>>> >>>> To fix that problem directly: >>>> >>>> (loop [coll coll ; coll starts with an initial value of its >>>> value outside the loop >>>> counter counter] ; counter starts with an initial value of its >>>> value outside the loop >>>> ;; rest of code here ... >>>> >>>> Then you're left with an extra `let` (which was serving a similar >>>> purpose to `loop` initialization?), and the whole `loop` is possibly >>>> superfluous, because a function can be the target of a `recur`. >>>> >>>> >>> oke, so I could do (loop [ coll coll counter 0] instead of the let ? >>> And what do you mean with superfluous ?? >>> >>> Roelof >>> >>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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 that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.