J-一种默认使用连词和副词的方法



这是一个幼稚的fibonacci序列:

   (,[:+/_2&{.)^:10]0 1      NB. 10 + 2 elements
0 1 1 2 3 5 8 13 21 34 55 89

这是其明确的monadic版本:

   3 :'(,[:+/_2&{.)^:y 0 1' 10
0 1 1 2 3 5 8 13 21 34 55 89

问题是:在默认定义中,我可以以某种方式向^:连接提供最右边的参数,因此(我的头顶(:

   ((,[:+/_2&{.)^:y 0 1)10
0 1 1 2 3 5 8 13 21 34 55 89

会产生预期的结果吗?或者,更正确的定义(再次,在我的头顶上(:

   ((,[:+/_2&{.)^:(y-2)1 1)10
1 1 2 3 5 8 13 21 34 55

更广泛地:是否可以默认定义J中的副词和连词,还是只有明确的定义才有可能?

我的肠道(以及这个问题的材料(告诉我,我应该走到黑暗的一面,并了解有关Gerunds和`/`:连词的更多信息。那是对的吗?如果是这样,我将感谢有关此事的任何新手友好型材料:(

我认为我的自然方法是创建一个二元动词,其中左参数是迭代的数量,正确的参数是初始字符串。这使我可以轻松扩展字符串。

fib0=: (,[:+/_2&{.)@]^:[ 
   10 fib0 0 1
0 1 1 2 3 5 8 13 21 34 55 89
   11 fib0 0 1
0 1 1 2 3 5 8 13 21 34 55 89 144

我可以通过将(,[:+/_2&{.)作为左参数作为^:10作为左参数来创建一个动词。

不太灵活。
  fib1=: (,[:+/_2&{.)^: 10
   fib1 0 1
0 1 1 2 3 5 8 13 21 34 55 89

我最终伪造了您可能要寻找的结果,即通过在定义中附加0 1并创建一个monadic动词寻找迭代次数。

  fib2=: ((,[:+/_2&{.)@](^: [))& 0 1
   fib2 10
0 1 1 2 3 5 8 13 21 34 55 89
   fib2 11
0 1 1 2 3 5 8 13 21 34 55 89 144

,但是您想知道是否有一种默认的副词来进行此操作。借助我上面显示的内容,您可以通过在左侧添加动词(,[:+/_2&{.)来从CONJUNTICT ^:创建副词。

   afib=: (,[:+/_2&{.) ^: 
   (10 afib)                 NB. an adverb takes its left argument creating a conjunction.
(, ([: +/ _2&{.))^:10
   (10 afib) 0 1
0 1 1 2 3 5 8 13 21 34 55 89
   (11 afib) 0 1
0 1 1 2 3 5 8 13 21 34 55 89 144

相关内容

  • 没有找到相关文章

最新更新