如何在 APL 中将数字拆分成数字
How to split a number into its digits in APL
在 APL 中,如何将整数或数字拆分为包含其数字的向量?最简洁(最短)的方法是什么?
您可以使用以 10 为底数的 Decode
的倒数:
10⊥⍣¯1⊢
因为 Decode
会根据需要接收尽可能多的数字并对其进行解码,它的逆函数会接收一个数字并将其编码为所需的尽可能多的数字,
或者,使用 ⎕IO←0
,您可以尝试在数字向量中找到格式化数字的索引:
⎕D⍳⍕
这比使用自定义长度的 Encode
更好,该自定义长度是通过将 10 的数组整形为输入的 log10 的长度得出的:
{⍵⊤⍨10⍴⍨⌈10⍟1+⍵}
我在 APL2 中通过首先应用 FORMAT 然后 EXECUTE EACH 来做到这一点(尽管它可能仅限于正整数):
⍎¨⍕
虽然不是最简洁的,但是最早的APL就有做到这一点的力量。 The 1962 book 展示了如何仅使用基本函数和矩阵乘法来处理位置数字系统:
我显然尝试这样做:
a⊤⍨10×b÷b←⍳⌈10⍟a←⍵
在 APL 中,如何将整数或数字拆分为包含其数字的向量?最简洁(最短)的方法是什么?
您可以使用以 10 为底数的 Decode
的倒数:
10⊥⍣¯1⊢
因为 Decode
会根据需要接收尽可能多的数字并对其进行解码,它的逆函数会接收一个数字并将其编码为所需的尽可能多的数字,
或者,使用 ⎕IO←0
,您可以尝试在数字向量中找到格式化数字的索引:
⎕D⍳⍕
这比使用自定义长度的 Encode
更好,该自定义长度是通过将 10 的数组整形为输入的 log10 的长度得出的:
{⍵⊤⍨10⍴⍨⌈10⍟1+⍵}
我在 APL2 中通过首先应用 FORMAT 然后 EXECUTE EACH 来做到这一点(尽管它可能仅限于正整数):
⍎¨⍕
虽然不是最简洁的,但是最早的APL就有做到这一点的力量。 The 1962 book 展示了如何仅使用基本函数和矩阵乘法来处理位置数字系统:
我显然尝试这样做:
a⊤⍨10×b÷b←⍳⌈10⍟a←⍵