Posted May 14, 20177 yr (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
May 14, 20177 yr 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
May 14, 20177 yr ;;; 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)))
May 14, 20177 yr 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))
Create an account or sign in to comment