定义 Monad 函数?

Defining Monad Function?

v=: ((1 2);(3 4);(0 5);<(2 1))
d =: (1,0.5,1,0.25);(0.5,1,0.75,0.25);(1,0.75,1,0);(0.75,0.25,0,1)
force=:(v ((0{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(0{d)
force=:(v ((1{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(1{d)
force=:(v ((2{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(2{d)
force=:(v ((3{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(3{d)
force=:(v ((4{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(4{d)
force=:(v ((y{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(y{d)

给定 v 和 d, 第一列力给我们 v.

的第 (n+1) 个向量

力的第 2 列为我们提供了来自 v 的每个向量。

力的第 3 列为我们提供了 2 个向量之间的常数。

也就是说,(1 2);(1 2) 将在第 3 列力上有 1,但 (1 2);(3 4) 可能没有。 我想做一个 monad 函数给我们

force=:(v ((1{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(1{d)

如果我们输入 force_constant 1

force=:(v ((2{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(2{d)

如果我们输入 force_constant 2

有人可以帮忙吗?

你已经自己写了大部分。只需使用 force 的最终版本,即您使用 y 编写的版本,并将其包装在明确的定义中:

    v =:  ((1 2);(3 4);(0 5);<(2 1))
    d =:  (1,0.5,1,0.25);(0.5,1,0.75,0.25);(1,0.75,1,0);(0.75,0.25,0,1)

   force_constant =: monad def '(v ((y{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(y{d)'

   force_constant 1
+---+---+----+
|3 4|1 2|0.5 |
+---+---+----+
|3 4|3 4|1   |
+---+---+----+
|3 4|0 5|0.75|
+---+---+----+
|3 4|2 1|0.25|
+---+---+----+

   force_constant 2
+---+---+----+
|0 5|1 2|1   |
+---+---+----+
|0 5|3 4|0.75|
+---+---+----+
|0 5|0 5|1   |
+---+---+----+
|0 5|2 1|0   |
+---+---+----+

现在,这个公式取决于全局定义的名词 vd。您可能会考虑更改它,以便 force_constant 或相关动词将这些数组作为输入。最简单的方法是将 monads 更改为 dyads,让 vd 作为左参数进来,x¹.


¹但我们现在可以保持简单。如果您需要有关您的代码的更多反馈,请随时 post 在 http://codereview.stackexchange.com/.

上反馈