When I try to create a single-float array like this, i get:
(make-array 2 :element-type 'double-float :initial-contents #(3.0 4.0))
Вы пытаетесь создать массив одного плавает (что говорит ваш текст) или массив дважды плавает (что предполагает код)? Чтобы создать массив из с двойными поплавками, вы должны использовать (make-array & hellip;: element-type 'double-float & hellip;), а для создания массива с одним поплавком, вы бы используйте (make-array & hellip;: element-type 'single-float & hellip;). Однако в любом случае элементы в исходном элементе должны соответствовать указанному типу; запись HyperSpec для make-array говорит, что:
initial-contents is composed of a nested structure of sequences. The numbers of levels in the structure must equal the rank of array. Each leaf of the nested structure must be of the type given by element-type.
С одной-поплавком и двойным поплавком не тот же самый тип, вам необходимо заранее преобразовать данные. Вы можете использовать карту создать результат, или карту, записанными в, если вы хотите создать его первый, а затем скопировать результаты в Ев:.
CL-USER> (map '(vector double-float *)
#'(lambda (x) (float x 1.0d0))
#(3.0 4.0))
#(3.0d0 4.0d0)
CL-USER> (map-into (make-array 2 :element-type 'double-float)
#'(lambda (x) (float x 1.0d0))
#(3.0 4.0))
#(3.0d0 4.0d0)
Эти примеры предполагают, что вы пытаетесь создать массив из double-floats, что и предлагает ваш код. Если вы хотите просто массив одного поплавки, то вы можете просто правильный тип:
CL-USER> (make-array 2 :element-type 'single-float :initial-contents #(3.0 4.0))
#(3.0 4.0)
Или, как Svante noted, вы можете просто написать # (3,0 4,0) или # (3.0s0 4.0s0) напрямую.
Большое спасибо. Я приспосабливаю свой ответ для single-float, и он работает. – Xaving
@ Что вы подразумеваете под его адаптацию? В вопросе вы попросили создать вектор двойных поплавков из вектора одиночных поплавков. Вот что делает этот код ... –
Я спросил наоборот. Таким образом, в вашем решении все, что связано с двойным, я заменил его на один-float. – Xaving