Jump to content

Featured Replies

Posted
(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

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

;;; 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)))

 

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))

 

(apply #'mapcar #'(lambda (&rest all) all) lists))

this is really cool! :-)

i have to learn more about lisp :-)

Create an account or sign in to comment


Copyright © 2014-2025 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy