Инициализировать массив в клен
Я пытаюсь создать массив, содержащий сумму квадратов от 1 до произвольного k. Для этого я в настоящее время вызывал другую функцию в моем цикле как: mylist[k]=function(k), но продолжаю получать ошибку выхода за границы. Как я могу инициализировать массив заданного размера (скажем, n) в Maple?
1 ответ
В Maple списки и массивы - это не одно и то же. Списки неизменны, а массивы изменчивы. Это анахронизм, что для коротких списков Maple позволит вам "назначить" запись, как если бы она была массивом. Однако на самом деле это создает новый массив и крайне неэффективен. Вот почему для достаточно большого списка вы видите ошибку при попытке сделать это.
Один правильный способ создать список с заданным размером n - это использовать команду seq, которая создает последовательность.
> [seq( i^2, i = 1 .. 10 )];
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
(Вместо буквальной верхней границы "10" вы можете использовать значение параметра, переданного в процедуру, в которой вы использовали эту конструкцию.) Квадратные скобки ([]) вокруг вызова seq() превращают полученную последовательность в структура данных списка.
Если вам действительно нужен (изменяемый) массив, то используйте конструктор Array практически таким же образом.
> Array( [seq(i^2,i=1..10)] );
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Однако существует альтернативный синтаксис, позволяющий избежать создания промежуточного списка:
> Array( 1 .. 10, i -> i^2 );
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
(Обратите внимание, что печатный вывод для списков и массивов выглядит одинаково; не позволяйте этому сбить вас с толку.)
Вы должны быть в состоянии заменить карту квадрата (i ->i^2), которую я использовал здесь, вызовом вашей собственной процедуры.