2015-04-28 2 views
3

Я немного смущен; Я заметил, что если я делаю:Maxima: что Maxima называют «массивом»?

a[sqrt(2)] : 1; 
arrays; 

Я хотел бы получить:

[a] 

Так a массив для Maxima ... еще sqrt(2) является иррациональным числом.

Я использую для представления массива как набор элементов, отсортированных по индексам, где эти индексы являются целыми числами ... Я признаю, что мое определение для «массива» сильно зависит от других «несимвольных» языков программирования , В этих языках массивы «сопоставляются» с определенной смежной областью памяти компьютера. Поэтому естественно использовать целое число в качестве индексов, поскольку целое число является счетным. Однако реальные числа не счетны.

Очевидно, что максимы, по-видимому, имеют другое определение термина «массив»: что это такое? (документация не определяет его, по крайней мере, нет вводный абзац в documentation section dedicated to arrays)

ответ

2

концепция Максима массивов, списков и матрицы довольно запутанной, так как различные идеи срослись в многолетнем проекте.

«индексированная переменная» Maxima = символ с индексом (с произвольным индексом) и не назначенное значение. Например. a[sqrt(2)] без присвоенного значения.

«необъявленный массив» Maxima = хеш-таблица с произвольными ключами, ассоциированная с символом массива как свойство символа, а не значение. Ваш a[sqrt(2)] : 1 является примером необъявленного массива. Maxima создает массив a при первом назначении значения.

«объявленный массив» Maxima = смежное хранилище, связанное с символом массива как символьным свойством, а не значением.

Maxys's "Lisp array" = непрерывное хранилище, связанное с символом массива в качестве значения символа.

«быстрый массив» Maxima = хеш-таблица, связанная с символом массива в качестве значения символа.

Да, это беспорядок. Извини за это. Это все интересные идеи, но нет единой структуры. Я даже не упоминал списки и матрицы. Надеюсь, это все равно поможет.

+0

Не пожалеете! (^. ^) У меня есть еще несколько вопросов для вас: я действительно не понимаю разницы между «свойством символа» и «значением символа» ... Другие вопросы: единственный способ создать «объявленный массив» - это вызов 'array()', правильно? Как мне сделать, чтобы создать «lisp-массив» или «быстрый массив»? –

+0

Lisp имеет концепцию символа, имеющего несколько слотов (что-то вроде клавиш хэш-таблицы). Существует функциональный слот, слот значения, слот свойств, возможно, другие. Если символ может одновременно иметь как значение, так и функцию, он называется Lisp-2; если только один за раз, он называется Lisp-1. Список свойств - это всего лишь список ключей и значений; это простой способ связать произвольный материал с символом. Преимущество кладки хранилища для массива в списке свойств, а не в значении символа, заключается в том, что при вводе, скажем, 'a', вы просто видите' a', а не весь массив. –

+0

О объявленных массивах, да, они создаются 'array'. Массивы Lisp создаются 'make_array', а быстрые массивы создаются автоматически (как необъявленные массивы), когда глобальный флаг' use_fast_arrays' является 'true'. –