(defun print-array (a m n &key ((:item-getter p))) (format t "~a:~%" p) (dotimes (i m) (dotimes (j n) (format t "[~d, ~d] = ~a~%" i j (funcall p a i j))))) (defun 2d-array-get-item (a i j) (aref a i j)) (defun array-of-arrays-get-item (a i j) (aref (aref a i) j)) (let ((2d-array (make-array '(2 3) :initial-contents '((1 2 3) (4 5 6)))) (array-of-arrays (make-array 2 :initial-contents (list (make-array 3 :initial-contents '(1 2 3)) (make-array 2 :initial-contents '(4 5)))))) (format t "~a~%" 2d-array) (format t "~a~%" array-of-arrays) (print-array 2d-array 2 3 :item-getter '2d-array-get-item) (print-array array-of-arrays 2 3 :item-getter 'array-of-arrays-get-item))
Standard input is empty
#2A((1 2 3) (4 5 6)) #(#(1 2 3) #(4 5)) 2D-ARRAY-GET-ITEM: [0, 0] = 1 [0, 1] = 2 [0, 2] = 3 [1, 0] = 4 [1, 1] = 5 [1, 2] = 6 ARRAY-OF-ARRAYS-GET-ITEM: [0, 0] = 1 [0, 1] = 2 [0, 2] = 3 [1, 0] = 4 [1, 1] = 5
*** - AREF: index 2 for #(4 5) is out of range