如何在 APL 中将数字拆分成数字

How to split a number into its digits in APL

在 APL 中,如何将整数或数字拆分为包含其数字的向量?最简洁(最短)的方法是什么?

您可以使用以 10 为底数的 Decode 的倒数:

10⊥⍣¯1⊢

因为 Decode 会根据需要接收尽可能多的数字并对其进行解码,它的逆函数会接收一个数字并将其编码为所需的尽可能多的数字,

或者,使用 ⎕IO←0,您可以尝试在数字向量中找到格式化数字的索引:

⎕D⍳⍕

Demo for both solutions.

这比使用自定义长度的 Encode 更好,该自定义长度是通过将 10 的数组整形为输入的 log10 的长度得出的:

{⍵⊤⍨10⍴⍨⌈10⍟1+⍵}

我在 APL2 中通过首先应用 FORMAT 然后 EXECUTE EACH 来做到这一点(尽管它可能仅限于正整数):

⍎¨⍕

Try it online!

虽然不是最简洁的,但是最早的APL就有做到这一点的力量。 The 1962 book 展示了如何仅使用基本函数和矩阵乘法来处理位置数字系统:

我显然尝试这样做: a⊤⍨10×b÷b←⍳⌈10⍟a←⍵