Page 1 of 1

Applying multiple lists?

Posted: Sat Mar 12, 2011 12:54 am
by methodic
Hi there,

Having a brain-fart, I blame it on dropping my morning coffee by accident before finishing it.

I have a list with multiple lists inside, and I'd like to map a function to each list as if I were passing them separately to map.

Example:
(map append '("one" "two") '("for" "you")) will render ("onefor" "twoyou").

I'd like to accomplish that, but if the argument to map is one list, with multiple lists. Sort of like this psuedo-code:
(map append (map each mylist))

Of course I could write a primitive function called "each" that did nothing but return a single element, but I figured that would be taking the long road since I'm sure newLisp has something built in I'm missing.

Thanks in advance!

Re: Applying multiple lists?

Posted: Sat Mar 12, 2011 2:52 am
by Kazimir Majorinc
(eval (extend '(map append) (map quote '(("one" "two")("for" "you")))))
(map (fn(x)(apply append x)) (transpose '(("one" "two")("for" "you"))))

Re: Applying multiple lists?

Posted: Sat Mar 12, 2011 8:17 am
by cormullion
If transpose works for you, then it's good"

Code: Select all

(set 'l '(("one" "two") ("for" "you")))
(map join (transpose l))
;-> ("onefor" "twoyou")

Re: Applying multiple lists?

Posted: Sat Mar 12, 2011 9:29 am
by cormullion
Although - after a coffee - I thought that

Code: Select all

(set 'L '(("one" "two") ("for" "you")))
    (map append (L 0) (L 1))
)
was easier if you knew there were just two elements..

Re: Applying multiple lists?

Posted: Sat Mar 12, 2011 4:47 pm
by methodic
cormullion wrote:Although - after a coffee - I thought that

Code: Select all

(set 'L '(("one" "two") ("for" "you")))
    (map append (L 0) (L 1))
)
was easier if you knew there were just two elements..
Bah, transpose is what I was looking for, thanks! Here is what I was looking to do:
I had a list of lists of scores, and wanted to add all scores with their respective index:

Code: Select all

(map (fn (x) (apply add x)) (map append (transpose scores)))