Повторное применение функции в APL - PullRequest
2 голосов
/ 13 октября 2019

Учитывая целые числа p , q и n Я хотел бы сгенерировать вектор длины n с элементами

(⌊p ÷ q) (⌊(⌊p ÷ q) ÷ q) ...

Другими словами, я хочу построить вектор, в котором элемент i : th {⌊⍵ ÷ q} применяется i раз на p . Как я могу сделать это в APL?

1 Ответ

1 голос
/ 16 октября 2019

Это короткое решение работает с использованием сканирования \ работает во всех APL, которые поддерживают даже базовые dfns (встроенные лямбды):

1↓{⌊⍵÷q}\(1+n)⍴p

Попробуйте онлайн!

Отметьте его неэффективность;он пересчитывает с начала для каждого термина.

Более сложное решение позволяет избежать пересчета с помощью / для итерации:

r←,p
{r,←⌊(¯1↑r)÷q}/(1+n)⍴1
1↓r

Попробуйте онлайн!

...