Jump to content
rndrnd

Lookin for a function who could do that

Recommended Posts

o_e    0
46 minutes ago, rndrnd said:

(trans  '((1 2 3) (a b c) (4 5 6))

 

=> ((1 a 4) (2 b 5) (3 c 6))

 

is it somewhere in Opusmodus ? Any idea how to make it ?

 

Thanks

 

Patrick

 

(loop for x in  '(1 2 3)
  	 for y in '(a b c)
     for z in '(4 5 6)
     collect (list x y z))

hth

 

ole

Share this post


Link to post
Share on other sites
AM    98
;;; in "pure lisp" with NIL when lists have not the same length

(defun trans* (lists)
  (loop repeat (car (last (sort-asc (mapcar 'length lists))))
    for cnt = 0 then (incf cnt)
    collect (loop for i in lists
                collect (nth cnt i))))
  
(trans* '((1 2 3 4) (a b c d) (11 12 13 14) (k l m n)))
(trans* '((1 2 3 4) (a b c d e) (11 12 13 14 14 16) (k l m n o p q r s t)))
(trans* '((1 2 3 4) (a b c d e) (11 12 13 14) (k l m n r s t)))

 

Share this post


Link to post
Share on other sites

Here is another approach to implement the same thing, but a but more concisely in just one line (most of the code below is the documentation :)

(defun mat-trans (lists)
  "Matrix transformation.
   (mat-trans '((a1 a2 a3) (b1 b2 b3) (c1 c2 c3) ...))
   => ((a1 b1 c1 ...) (a2 b2 c2 ...) (a3 b3 c3 ...))"
  (apply #'mapcar #'(lambda (&rest all) all) lists))

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×