lisp 習題 矩陣旋轉

babyyellow發表於2012-08-08
給定一個方形矩陣 (m = n)   做順時針90度轉換:

CL-USER> (turn #2a((a b)(c d)))
#2A((C A) (D B))


1 2 3            7 4 1             
4 5 6   =>    5 8 2      
7 8 9            9 6 3  


CL-USER> (defun turn (arr)
       (let ( (m (array-dimensions arr)))
         (let ( (arr1 (make-array m )))
           (dotimes ( i (car m) i)
         (dotimes (j (car m) j)
           (setf (aref arr1 i j) (aref arr (- (car m) 1 j) i))))
           arr1)))
STYLE-WARNING: redefining COMMON-LISP-USER::TURN in DEFUN
TURN

CL-USER>  (setf arr #2A((1 2 3 4) (5 6 7 8) (9 10 11 12) (13 14 15 16)))
#2A((1 2 3 4) (5 6 7 8) (9 10 11 12) (13 14 15 16))
CL-USER>
CL-USER> (turn arr)
#2A((13 9 5 1) (14 10 6 2) (15 11 7 3) (16 12 8 4))
CL-USER>



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-740384/,如需轉載,請註明出處,否則將追究法律責任。

相關文章