Я далеко не эксперт по Maxima, но с вы попросили меня взглянуть на этот вопрос , вот что я получил после быстрого просмотра документации .
Во-первых, при просмотре документации по матрицам был получен только один способ превращения матриц в списки - list_matrix_entries
. Тем не менее, это возвращает плоский список записей. Чтобы получить структуру вложенного списка, работает что-то вроде следующего
DataL : [[1, 2], [2, 4], [3, 6], [4, 8]]; /* Using your example list */
DataM : apply('matrix, DataL); /* and matrix */
DataML : makelist(list_matrix_entries(row(DataM, i)), i, 1, 4);
is(DataML = DataL); /* true */
Это неуклюже и, вероятно, неэффективно. Используя базовую структуру Lisp в Maxima (и аналогию с Mathematica, с которой я более знаком), вы можете исследовать головки DataL
и DataM
, используя part :
part(DataL, 0); /* [ */
part(DataM, 0); /* matrix */
Затем для преобразования между двумя структурами вы можете использовать substpart
is(substpart(matrix, DataL, 0) = DataM); /* true */
is(substpart( "[", DataM, 0) = DataL); /* true */
Использование substpart
на уровне 0
практически аналогично использованию apply
, за исключением того, что оно работает не только со списками.