将数字视为数组

Treat a number as an array

据我所知,在J中是不可能对数字进行数组运算的;例如

NB. In J, this won't work:
m =: 234
    +/ m
9 
    */ m
24

因为我不能直接做,有没有办法像这样把一个数字拆分成一个列表然后再拆分回来?:

    splitFunction 234
2 3 4
    +/ (splitFunction 234)
9
    |. (splitFunction 234)
4 3 2
    concatenateFunction (4 3 2)
432

如果不可能,有没有办法将数字转成字符串,然后再转回去? (因为 J 将字符串视为字符数组)例如

     |. (toString 234)
432

好吧,这里有一些内容可以满足您的期望。让我们从

开始
   m=:234  NB. m is the integer 234

   +/ m    NB. +/ sums across the items - only item is 234
234
   */ m    NB. */ product across the items - only item is 234
234

所以整数 234 的数字之间似乎存在混淆,即 2 3 4 和 234 是一个只有一项值为 234 的原子这一事实。

从那开始,您可以使用 10 & #. ^: _1 解构整数,它由 Base (#.) 的逆 (^:_1) 和左参数 [=15] 组成=] 允许在基数 10 中进行分解。 J 反转原语的方法是使用幂合取 (^:) 提高到负 1 (_1)

   splitFunction =: 10 & #.^:_1
   concatenateFunction =: 10 & #.
   splitFunction 234
2 3 4
   +/ splitFunction 234
9
   */ splitFunction 234
24
   |. splitFunction 234
4 3 2
   concatenateFunction 2 3 4
234
       concatenateFunction splitFunction 234
    234

我认为这会满足您的要求,但您可能需要多花点时间思考您期望 +/ 234 做什么以及这是否有用。