这是一个幼稚的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