将数字视为数组
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
做什么以及这是否有用。
据我所知,在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
做什么以及这是否有用。