首页 > 解决方案 > 将数字视为数组

问题描述

据我所知,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

标签: j

解决方案


好吧,这里有一点要解开您的期望。让我们从

   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 的项目的事实之间似乎存在混淆。

从那开始,您可以使用它来解构您的整数,该整数由Base ( )10 & #. ^: _1 的逆 ( ) 和一个 left 参数组成,该参数允许在 base 中完成分解。J 反转原语的方法是使用幂连词 ( ) 提升到负数 1 ( )^:_1#.1010^:_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做什么以及这是否是有用的行为。


推荐阅读