Инициализировать массив в клен

Я пытаюсь создать массив, содержащий сумму квадратов от 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), которую я использовал здесь, вызовом вашей собственной процедуры.

Другие вопросы по тегам