定义 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 |
+---+---+----+
现在,这个公式取决于全局定义的名词 v
和 d
。您可能会考虑更改它,以便 force_constant
或相关动词将这些数组作为输入。最简单的方法是将 monads 更改为 dyads,让 v
和 d
作为左参数进来,x
¹.
¹但我们现在可以保持简单。如果您需要有关您的代码的更多反馈,请随时 post 在 http://codereview.stackexchange.com/.
上反馈
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 |
+---+---+----+
现在,这个公式取决于全局定义的名词 v
和 d
。您可能会考虑更改它,以便 force_constant
或相关动词将这些数组作为输入。最简单的方法是将 monads 更改为 dyads,让 v
和 d
作为左参数进来,x
¹.
¹但我们现在可以保持简单。如果您需要有关您的代码的更多反馈,请随时 post 在 http://codereview.stackexchange.com/.
上反馈