Как разбить число на цифры в APL
В APL, как я могу разбить целое число или число на вектор, содержащий его цифры? Какой самый краткий (кратчайший) способ сделать это?
4 ответа
Вы можете использовать обратную Decode
с основанием 10:
10⊥⍣¯1⊢
поскольку Decode
будет принимать столько цифр, сколько необходимо, и декодировать их, его обратное будет принимать число и кодировать его столько раз, сколько необходимо,
или, с ⎕IO←0
Вы можете попытаться найти индексы отформатированного числа внутри вектора цифр:
⎕D⍳⍕
Это лучше, чем уродливое использование Encode
с пользовательской длиной, полученной путем формирования массива 10 к длине лог10 ввода:
{⍵⊤⍨10⍴⍨⌈10⍟1+⍵}
Я сделал это в APL2, сначала применив FORMAT, а затем EXECUTE EACH (хотя это может быть ограничено положительными целыми числами):
⍎¨⍕
Не самый краткий, но сила сделать это была в самой ранней APL. Книга 1962 года показывает, как работать с позиционными системами счисления, используя только базовые функции и умножение матриц: