Почему форма, которая передается как :initial-element выполняется только раз? В CLHS ведь ясно написано:
If
initial-element is supplied, it is used to initialize each (!!!)
element of
new-array.Ну да, она один раз вычисляется, и результат записывается в каждую ячейку. Чтобы не делать лишней работы
а почему должно быть иначе? пишите цикл, если Вы хотите каждый элемент массива инициализировать разными объектами. Через loop, например. Есть еще функционалы типа map и т.д.
А вот почему бы не добавить :initial-form, как в слотах обьектов?
Было бы красивее, а так нужно дополнительную форму писать.
Кстати, а как сделать map на многомерный array?
(defun array-view (array)
(declare (type array array))
(make-array (array-total-size array)
:element-type (array-element-type array)
:displaced-to array))(let ((array (make-array '(2 2) :initial-contents '((1 2) (3 4)))))
(let ((view (array-view array)))
(map-into view #'1+ view)
(print array))) Я как-то не особо функции высокого порядка жалую (хотя в коде по раскрытию макроса можно использовать без проблем, конечно), поскольку в CL много и других выразительных средств.
Можно делать отображения на многомерные массивы?! Круто!