CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread Roelof Wobben
Hello, 

I have this form

(ns forclojure.core)

  (defn secondlast [coll counter]
(let [ number 0
   counter  ( - (count coll)2)]
  (loop [coll counter]
(if (== counter number)
  (first coll)
  (recur (next coll) (+ counter 1 ))

But as soon as I try to send it to REPL I see this message: 

CompilerException java.lang.IllegalArgumentException: Mismatched argument 
count to recur, expected: 1 args, got: 2, 
compiling:(/home/roelof/clojure/forclojure/src/forclojure/core.clj:9:11) 

Roelof

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


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread 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 [collcoll  ; 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`.

On Tue, May 6, 2014 at 3:25 AM, Roelof Wobben rwob...@hotmail.com wrote:

 Hello,

 I have this form

 (ns forclojure.core)

   (defn secondlast [coll counter]
 (let [ number 0
counter  ( - (count coll)2)]
   (loop [coll counter]
 (if (== counter number)
   (first coll)
   (recur (next coll) (+ counter 1 ))

 But as soon as I try to send it to REPL I see this message:

 CompilerException java.lang.IllegalArgumentException: Mismatched argument
 count to recur, expected: 1 args, got: 2,
 compiling:(/home/roelof/clojure/forclojure/src/forclojure/core.clj:9:11)

 Roelof

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


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


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread 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 [collcoll  ; 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 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.


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread Roelof Wobben
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 [collcoll  ; 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 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.


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread 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?

- James


On 6 May 2014 11:24, Roelof Wobben rwob...@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 [collcoll  ; 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 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.


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


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread Roelof Wobben


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 [collcoll  ; 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.comjavascript:
 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.


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread James Reeves
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 [collcoll  ; 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.


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread Roelof Wobben
As far as I understand recur is going back to the loop  so number is never 
going back to 0 
but I see the problem (-(count coll)2 is changing it value and that schould 
not happen. 
So I think I have to set the initial value of counter in the let. 

what schould happen is this 

   collnumbercounter 
1)   [1,2,3.4.5) 0 3
2)   [2.3,4,5]1 3
3)   [3,4,5]   2 3
4) [ 4,5]   3 3

so the (first coll) is executed which is 4. 

Am I at the right track now. 



Roelof

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


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread Roelof Wobben
Found the answer :

(defn secondlast [coll]
(let [number 0
  counter (- (count coll)2) ]
  (loop [coll coll counter counter number number]
(if (= counter number)
  (first coll)
  (recur (next coll) counter (+ number 1))

and without the loop there will be : (first(drop(reverse v)) 

Roelof


Op dinsdag 6 mei 2014 13:36:53 UTC+2 schreef Roelof Wobben:

 As far as I understand recur is going back to the loop  so number is never 
 going back to 0 
 but I see the problem (-(count coll)2 is changing it value and that 
 schould not happen. 
 So I think I have to set the initial value of counter in the let. 

 what schould happen is this 

collnumbercounter 
 1)   [1,2,3.4.5) 0 3
 2)   [2.3,4,5]1 3
 3)   [3,4,5]   2 3
 4) [ 4,5]   3 3

 so the (first coll) is executed which is 4. 

 Am I at the right track now. 



 Roelof



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


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread Gary Trakhman
Last + butlast?

On Tuesday, May 6, 2014, Roelof Wobben rwob...@hotmail.com wrote:

 Found the answer :

 (defn secondlast [coll]
 (let [number 0
   counter (- (count coll)2) ]
   (loop [coll coll counter counter number number]
 (if (= counter number)
   (first coll)
   (recur (next coll) counter (+ number 1))

 and without the loop there will be : (first(drop(reverse v))

 Roelof


 Op dinsdag 6 mei 2014 13:36:53 UTC+2 schreef Roelof Wobben:

 As far as I understand recur is going back to the loop  so number is
 never going back to 0
 but I see the problem (-(count coll)2 is changing it value and that
 schould not happen.
 So I think I have to set the initial value of counter in the let.

 what schould happen is this

collnumbercounter
 1)   [1,2,3.4.5) 0 3
 2)   [2.3,4,5]1 3
 3)   [3,4,5]   2 3
 4) [ 4,5]   3 3

 so the (first coll) is executed which is 4.

 Am I at the right track now.



 Roelof

  --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to 
 clojure@googlegroups.comjavascript:_e(%7B%7D,'cvml','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.comjavascript:_e(%7B%7D,'cvml','clojure%2bunsubscr...@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.comjavascript:_e(%7B%7D,'cvml','clojure%2bunsubscr...@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.


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread James Reeves
Yes, except there's no need to pass counter into the loop if it doesn't
change.

(And naming a constant value counter is a little weird).

- James


On 6 May 2014 13:07, Roelof Wobben rwob...@hotmail.com wrote:

 Found the answer :


 (defn secondlast [coll]
 (let [number 0
   counter (- (count coll)2) ]
   (loop [coll coll counter counter number number]

 (if (= counter number)
   (first coll)
   (recur (next coll) counter (+ number 1))

 and without the loop there will be : (first(drop(reverse v))

 Roelof


 Op dinsdag 6 mei 2014 13:36:53 UTC+2 schreef Roelof Wobben:

 As far as I understand recur is going back to the loop  so number is
 never going back to 0
 but I see the problem (-(count coll)2 is changing it value and that
 schould not happen.
 So I think I have to set the initial value of counter in the let.

 what schould happen is this

collnumbercounter
 1)   [1,2,3.4.5) 0 3
 2)   [2.3,4,5]1 3
 3)   [3,4,5]   2 3
 4) [ 4,5]   3 3

 so the (first coll) is executed which is 4.

 Am I at the right track now.



 Roelof



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


Re: CompilerException java.lang.IllegalArgumentException: Mismatched argument count to recur

2014-05-06 Thread James Reeves
On 6 May 2014 13:09, Gary Trakhman gary.trakh...@gmail.com wrote:

 Last + butlast?


Yeah, there are a few more concise solutions to this problem if you're
familiar with the standard library:

  (last (butlast coll))

  (second (reverse coll))

  (peek (pop (vec coll)))

And a more efficient loop-solution would just keep the previous value
stored until the end of the loop is reached:

  (loop [prev nil, coll (seq coll)]
(if (next coll)
  (recur (first coll) (next coll)
  prev))

- James





 On Tuesday, May 6, 2014, Roelof Wobben rwob...@hotmail.com wrote:

 Found the answer :

 (defn secondlast [coll]
 (let [number 0
   counter (- (count coll)2) ]
   (loop [coll coll counter counter number number]
 (if (= counter number)
   (first coll)
   (recur (next coll) counter (+ number 1))

 and without the loop there will be : (first(drop(reverse v))

 Roelof


 Op dinsdag 6 mei 2014 13:36:53 UTC+2 schreef Roelof Wobben:

 As far as I understand recur is going back to the loop  so number is
 never going back to 0
 but I see the problem (-(count coll)2 is changing it value and that
 schould not happen.
 So I think I have to set the initial value of counter in the let.

 what schould happen is this

collnumbercounter
 1)   [1,2,3.4.5) 0 3
 2)   [2.3,4,5]1 3
 3)   [3,4,5]   2 3
 4) [ 4,5]   3 3

 so the (first coll) is executed which is 4.

 Am I at the right track now.



 Roelof

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

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


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