Учитывая целые числа p , q и n Я хотел бы сгенерировать вектор длины n с элементами
(⌊p ÷ q) (⌊(⌊p ÷ q) ÷ q) ...
Другими словами, я хочу построить вектор, в котором элемент i : th {⌊⍵ ÷ q} применяется i раз на p . Как я могу сделать это в APL?
{⌊⍵ ÷ q}
Это короткое решение работает с использованием сканирования \ работает во всех APL, которые поддерживают даже базовые dfns (встроенные лямбды):
\
1↓{⌊⍵÷q}\(1+n)⍴p
Попробуйте онлайн!
Отметьте его неэффективность;он пересчитывает с начала для каждого термина.
Более сложное решение позволяет избежать пересчета с помощью / для итерации:
/
r←,p {r,←⌊(¯1↑r)÷q}/(1+n)⍴1 1↓r