J语言递归

时间:2019-05-08 01:08:08

标签: recursion j

我有一个初始(10 x 2)向量v1和一个(100 x 10 x 10)矩阵Cos。二元动词'move'使用第(10 x 10)个第i个矩阵返回另一个(10 x 2)向量来自Cos作为输入。

$Cos
   100 10 10
$v1 
   10 2 
v1
    0.89 0.91    
    0.01 0.24
    0.88 0.43
    0.43 0.32
    0.85 0.84
    0.27 0.31
    0.1  0.11
    0.49 0.9
    0.2  0.28
    0.66 0.96
(0{Cos) move v1
    1         1
    0.426426  0
    0.819478  0.304798
    0.66484   0.0362481
    0.505905  0.278294
    0.149514  0.0516271
    0         0.40583
    0.233825  0.759351
    0.03464   0.630262
    0.502968  0.686788

我想使用递归使矩阵

$p
   100 10 2

喜欢

0{p =: (0{Cos) move (v1)
1{p =: (1{Cos) move (p0)
2{p =: (2{Cos) move (p1)
...

我目前正在阅读J语言Wiki中的递归部分(1:`),但我有些困惑。

我应该只使用^:循环吗?

提前谢谢

1 个答案:

答案 0 :(得分:1)

根据您的描述,我会尝试

move~/\ v1, cos

这会将move插入在将v1前置为cos形成的列表的连续项之间。 ~(反射副词)意味着您插入move首先将得到O{cos move v1的结果,然后是1{cos move (0{cos move v1),其结果与1{cos move (0{p)相同,并且您在上面的定义将是1{p的值,依此类推,直到整个数组。

通常将递归保留给那些可以将问题分解为更简单的问题,直到将答案返回链的情况。由于这似乎不是这种类型的问题,因此这可能是递归使您感到困惑的原因。