【问题标题】:Arithmetic mean forwards vs backwards?算术意味着向前还是向后?
【发布时间】:2015-08-19 07:32:55
【问题描述】:

我很熟悉这种在 J 中求算术平均值的方法:

+/ % #

但它也显示为here

# %~ +/

这两个版本可以互换吗?如果不能,我应该在什么时候使用一个与另一个?

【问题讨论】:

    标签: j tacit-programming


    【解决方案1】:

    二元 ~ 反转动词的参数。 x f~ y 等价于 y f x。当您想反转动词的参数时,您可以使用~

    它最常见的用途之一是用于叉子和钩子的组合。例如,因为y f (g y)(f g) y,所以您可以在需要(g y) f y 时使用((f~) g) y

    【讨论】:

      【解决方案2】:

      在反向平均示例中,我真的看不出一种方法比另一种更有效的原因(VVV 形式的叉子),但是因为 J 中的叉子可以是非对称的(在 NVV 形式中)我可以看出一些原因,反转前叉的中间尖齿会是一个优势。举个例子:

         (5 # $) 1 2 3  NB. (N V V) form
      3 3 3 3 3
         (5 #~ $) 1 2 3 NB. (N V~ V) becomes effectively (V V N)
      5 5 5
         ($ # 5) 1 2 3  NB. (V V N) is a syntax error  
      |syntax error
      |       ($#5)1 2 3
      

      【讨论】:

        【解决方案3】:

        Dyadic ~ 是“被动”副词,它交换左右参数。因此x f~ yy f x 相同。 +/ % ## %~ +/ 是等价的。 2 % 5 给你0.4,但2 %~ 5 给你2.5

        这可以很方便地检查您正在使用的行的结果。虽然您可能会测试更复杂的东西,但您可以通过重复最后一行并在左侧添加而不重新排列任何内容或添加括号来检查自己。

           string =. 'J is beyond awesome.'
           'e' = string
        0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0
           string #~ 'e' = string
        eee
        

        monadic ~ 是“反射”副词,它使修饰的动词作为一个二元组来操作,为左和右复制单个参数。虽然这是安排论点的另一个捷径,但它与二元 ~ 完全不同。 *~ 416,因为您将 y 自身相乘 (y * y)。

        【讨论】:

          猜你喜欢
          • 2015-01-19
          • 2011-05-28
          • 2016-05-25
          • 1970-01-01
          • 1970-01-01
          • 2012-08-17
          • 1970-01-01
          • 2016-09-29
          • 2019-10-04
          相关资源
          最近更新 更多