J功率函数的语言等级

时间:2017-10-26 22:26:36

标签: j

t=:1
test=: monad define
    t=.y
    t=. t, 0
)   
testloop=: monad def'test^:y t'
testloop 1
1 0
testloop 2
1 0 0
testloop 10
1 0 0 0 0 0 0 0 0 0 0

为了简化这个

(testloop 0),(testloop 1), (testloop 2), ...

110100100010000...

我试过

, testloop"0 (i.10)

但它给出了

1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0...

好像我有排名问题,我无法弄清楚要使用哪一个。 如果你能在这个问题上帮助我,我将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:2)

这不是一个排名问题,因为结果用零填充,以便行长度匹配。

   testloop 1
1 0
   testloop 2
1 0 0
   testloop"0 [ 1 2 
1 0 0
1 0 0
   testloop"0 [ 1 2 3
1 0 0 0
1 0 0 0
1 0 0 0

如果我重新定义您的testtestloop以添加不同的附加数字,我们可以看到填充是如何工作的。

   test2 =: 3 : 0
​t=. y
​t=. t,2
​)
   test2loop=: monad def'test2^:y t'
   test2loop"0 [1
1 2
   test2loop"0 [2
1 2 2
   test2loop"0 [ 1 2 NB. 0 padded in first row
1 2 0
1 2 2
   test2loop"0 [ 1 2 3  NB. 0's padded in first two rows
1 2 0 0
1 2 2 0
1 2 2 2

为了解决填充问题,我将使用each=: &.>,以便在组合之前将结果装箱以避免填充。

   testloop each 1 2 3
+---+-----+-------+
|1 0|1 0 0|1 0 0 0|
+---+-----+-------+
   testloop each i. 10
+-+---+-----+-------+---------+-----------+-------------+---------------+-----------------+-------------------+
|1|1 0|1 0 0|1 0 0 0|1 0 0 0 0|1 0 0 0 0 0|1 0 0 0 0 0 0|1 0 0 0 0 0 0 0|1 0 0 0 0 0 0 0 0|1 0 0 0 0 0 0 0 0 0|
+-+---+-----+-------+---------+-----------+-------------+---------------+-----------------+-------------------+

使用;取消装箱并对结果进行调整

   ; testloop each i. 10
1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

老实说,我更倾向于使用复数作为#的左参数引入0来填充的事实。 0的数量取决于复数的虚数值。

   1j0 # 1
1
   1j1 # 1
1 0
   1j2 # 1
1 0 0
   test3=: monad def '(1 j. y)#1'
   test3 1
1 0
   test3 2
1 0 0
   test3 1 2
1 0 1 0 0
   test3 i. 10
1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0