J语言循环^:

loop in J language ^:

假设我在二维图上有10个随机点,每个点都与spring相连。所以每次迭代时,每个点都会收敛到力的中心。

我想做的是一个循环,在每次迭代后将随机向量添加到现有向量集。

所以它从

开始
v=: <(? 10 2 $ 20)   NB. 10 random vectors 
n=: <(? 1 2 $ 20)    NB. new random vector
force v              NB. force function moves the vectors toward to the center 
add n                NB. add n into v, then #v = 11
force v
add n
force v
add n 
...

我还在研究 force 函数,这看起来并不难,但我真的卡在了 add 部分。谁可以帮我这个事? 我的最终目标是让一个循环重复 add force 部分 100 次

谢谢!

看起来您想要做的是拆箱 vn,然后 ,(追加)。做到这一点的方法是使用 each=: &.>,它使用 &.(不足)和 >(开放)。

, each 打开,执行附加操作,然后关闭。

   v=.<(? 10 2 $ 20)
   v
+-----+
| 9 11|
| 1  4|
| 8  3|
| 3 12|
| 5  4|
| 7 11|
|10 11|
| 9 10|
| 0  8|
| 6 16|
+-----+
   n=: <(? 1 2 $ 20)
   n
+----+
|13 8|
+----+
   n , each v
+-----+
|13  8|
| 9 11|
| 1  4|
| 8  3|
| 3 12|
| 5  4|
| 7 11|
|10 11|
| 9 10|
| 0  8|
| 6 16|
+-----+
   each
&.>

我同意 Eelvex 的观点,即这些框似乎是多余的。也许以下是思考您要完成的目标的有用方法?

   new=: 2 ?@$ 20"_      NB. generates random, length 2 vector
   add=: ] , new         NB. appends new to right argument
   add^:(3) Init=: 4 2 ?@$ 20
11  9
 9 16
 9 13
 0 17
 3  3
 7 17
 6  6

如果你有一个动词 force 你也可以在每次迭代中应用它:

   force=: -:            NB. example verb (halves right argument)
   force@add^:(5) Init=: 4 2 ?@$ 20   NB. 5 iterations
0.46875  0.3125
0.15625 0.53125
0.28125 0.53125
 0.5625 0.53125
0.59375 0.59375
  1.125   0.375
  0.125   2.375
   2.25     3.5
      5     9.5