Sono lontano da un esperto Maxima, ma dal you asked me to look at this question, ecco cosa ho dopo una rapida occhiata allo documentation.
Innanzitutto, l'documentation on matrices ha fornito solo un modo per trasformare le matrici in elenchi, ovvero list_matrix_entries
. Tuttavia, questo restituisce un elenco semplice delle voci. Per ottenere una struttura lista annidata, qualcosa come le seguenti opere
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 */
Questo è goffo e probabilmente inefficiente. Utilizzando la struttura sottostante Lisp a Maxima (e analogia con Mathematica, che sono più familiarità con) è possibile esaminare le teste di DataL
e DataM
utilizzando part:
part(DataL, 0); /* [ */
part(DataM, 0); /* matrix */
Poi per la conversione tra le due strutture, si può utilizzare substpart
is(substpart(matrix, DataL, 0) = DataM); /* true */
is(substpart("[", DataM, 0) = DataL); /* true */
utilizzando substpart
a livello 0
è quasi la stessa cosa che usare apply
, tranne che funziona su più di un semplice elenca.
Grazie. Sembra funzionare :-). –
@Grzegorz Puoi spostare il segno di spunta nella risposta di Robert, poiché sembra essere il modo più ragionevole di fare le cose. – Simon
@Simon Fair point - Lo ha fatto. Tuttavia, non riesco a ricordare perché, perché stavo scrivendo la sceneggiatura Maxima più lunga, nel mio caso la tua soluzione funzionava meglio o era più conveniente. Comunque, spuntare il segno di spunta Grazie a tutti e due per l'aiuto, grazie! –