newLISP Fan Club

Forum => newLISP in the real world => Topic started by: methodic on March 11, 2011, 04:54:24 PM

Title: Applying multiple lists?
Post by: methodic on March 11, 2011, 04:54:24 PM
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!
Title: Re: Applying multiple lists?
Post by: Kazimir Majorinc on March 11, 2011, 06:52:00 PM
(eval (extend '(map append) (map quote '(("one" "two")("for" "you")))))

(map (fn(x)(apply append x)) (transpose '(("one" "two")("for" "you"))))
Title: Re: Applying multiple lists?
Post by: cormullion on March 12, 2011, 12:17:39 AM
If transpose works for you, then it's good"


(set 'l '(("one" "two") ("for" "you")))
(map join (transpose l))
;-> ("onefor" "twoyou")
Title: Re: Applying multiple lists?
Post by: cormullion on March 12, 2011, 01:29:44 AM
Although - after a coffee - I thought that


(set 'L '(("one" "two") ("for" "you")))
    (map append (L 0) (L 1))
)


was easier if you knew there were just two elements..
Title: Re: Applying multiple lists?
Post by: methodic on March 12, 2011, 08:47:17 AM
Quote from: "cormullion"Although - after a coffee - I thought that


(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:
(map (fn (x) (apply add x)) (map append (transpose scores)))