;gestione array tipo MATRICE
;---------------------------
;matrix1

(prog1
;assegna nome dimensiona (righe colonne) inizializza a 0
(setq mat1(make-array'(2 2):initial-element 0))
(print mat1)
;assegna nome dimensiona assegna valori 
(setq mat2(make-array'(2 2):initial-contents'((1 1)(2 2))))
(print mat2)
(setq mat3(make-array'(3 2):initial-contents'((1 1)(2 2)(3 3))))
(print mat3)
(setq mat4(make-array'(3 2):initial-element 0))
(print mat4)
(setq mat5(make-array'(2 3):initial-contents'((1 1 1)(2 2 2))))
(print mat5)
(terpri)
)

;gestione array tipo matrice
;--------------------------------
;matrix2

(prog1
;informa su caratteristiche matrice
(setq mat1(make-array '(3 2):initial-contents'((a b)(c d)(e f))))
(print mat1)
(print(array-rank mat1))
(print(array-dimension mat1 0))
(print(array-total-size mat1))
(terpri)
)
;gestione array tipo matrice
;--------------------------------
;matrix3

(prog1
;informa su caratteristiche matrice
(setq mat1(make-array '(3 2):initial-contents'((1 2)(3 4)(5 6))))
(print mat1)
(print(array-rank mat1))
(print(array-dimension mat1 0))
(print(array-total-size mat1))
;estrarre elemento da matrice riga 0 colonna 0
(setq a00(aref mat1 0 0))
(print a00)
;estrarre elemento riga 2 colonna 1
(setq a21(aref mat1 2 1))
(print a21)
;sostituisce elemento in matrice riga 1 colonna 1 con 9
(setf(aref mat1 1 1)'9)
(print mat1)
(terpri)
)

;gestione matrici
;------------------------
;definire matrice come ridimensionabile
;matrix4

(prog1
(print "")
(setq matx(make-array '(2 2):initial-contents'((1 2)(3 4))))
(print matx)
(print(array-rank matx))
(print(array-dimension matx 0))
(print(array-total-size matx))
(print(array-in-bounds-p matx 1 1))
(print(adjustable-array-p matx))
(terpri)
;-----------------------------------------------------------
(setq maty(make-array'(2 3):adjustable maty ))
(print maty)
(setq mat1(adjust-array maty'(3 2)))
(print mat1)
;-----------------------------------------------------------
)
ritorna