Page 1 of 1

How about $idx for map?

Posted: Sat Jul 26, 2008 12:50 pm
by Kazimir Majorinc
If it is realistic, it can be cute small improvement.

(map (lambda()(print $idx)) '(1 2 7)) ; 127

Posted: Sat Jul 26, 2008 1:37 pm
by Jeff
It would be more idiomatic for $idx to be the position of the current item in the list.

Code: Select all

(map (fn (x) (list $idx x)) '(1 2 3)) => '((0 1) (1 2) (2 3))
Anyway, it isn't necessary. Use dolist for that.

Posted: Sun Jul 27, 2008 1:19 am
by Kazimir Majorinc
Jeff wrote:It would be more idiomatic for $idx to be the position of the current item in the list.

Code: Select all

(map (fn (x) (list $idx x)) '(1 2 3)) => '((0 1) (1 2) (2 3))
Anyway, it isn't necessary. Use dolist for that.
Yes, you are right about $idx as position on the list. I was not focused. True, it is not necessary, but it is still small improvement which could provide similar advantage to $idx in other loops, isn't it - if its implementation is equally (time, space, implementation effort) cheap.

Posted: Sun Jul 27, 2008 2:37 pm
by Jeff
I don't think so. It breaks convention. A function, even an anonymous function, takes arguments. What is it if there are multiple parameters, such as (map 'list '(1 2 3) '(4 5 6))? You could always write your own macro that did the same thing, but accepted an expression instead of a function.