You've still got number and counter mixed up. Try going through the loop
you've made and writing down their values:

1. coll (list 1 2 3 4 5), number 0, counter 3
2. coll (list 2 3 4 5), number 0, counter 1
3. coll (list 3 4 5), number 0, counter 2
4. coll (list 4 5), number 0, counter 3
5. coll (list 5), number 0, counter 4
6. coll nil, number 0, counter 5
7. coll nil, number 0, counter 6
...

And from there it keeps going.

When writing software, you need to have an accurate mental model of the
program you're writing. If your program isn't doing what you expect it to,
then your mental model is broken. At that point you need to step through
the code you've written and work out exactly what it does each step.

- James


On 6 May 2014 12:03, Roelof Wobben <rwob...@hotmail.com> wrote:

>
>
> 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> 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
>>>
>>> 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
>>>
>>> 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.
>>>
>>> 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.

Reply via email to