You can use make_array
to create arrays directly:
(%i18) make_array(fixnum,4,3,8);
(%o18) {Array: #3A(((0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0))
((0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0))
((0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0))
((0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0)))}
Or bind results of Lisp invocations like this:
(%i21) :lisp (msetq $foo (make-array '(4 3 8)));
#3A(((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL))
((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL))
((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL))
((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)))
(%i21) foo;
(%o21) {Array: #3A(((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL))
((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL))
((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL))
((NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)))}
By the way, array
probably worked for you, too. I have never used it and was confused at first, since it is not printed after creation. But after checking the documentation and a Wikibooks article:
(%i22) array(A,2,2,2);
(%o22) A
(%i23) arrayinfo(A);
(%o23) [declared, 3, [2, 2, 2]]
(%i24) A[0,1,2]: 2;
(%o24) 2
(%i25) listarray(A);
(%o25) [#####, #####, #####, #####, #####, 2, #####, #####, #####, #####,
#####, #####, #####, #####, #####, #####, #####, #####, #####, #####, #####,
#####, #####, #####, #####, #####, #####]
There seem to be quite a few options for this kind of thing in Maxima, or, as the above linked Wikibooks article quotes Robert Dodier: "Maxima's current array/matrix semantics are a mess […]"