在q中, over
运算符 /
的常见插图是implementation of fibonacci sequence
10 {x,sum -2#x}/ 1 1
这确实打印了前10个斐波那契数字,但对于whitepaper中的 over
运算符的定义没有意义(第8页)
使用两个参数,第二个是列表,使用left参数作为第一个参数调用函数,将右参数的第一个元素作为第二个参数调用 . 接下来,调用函数,将前一次迭代的结果作为第一个参数,将第三个元素作为第二个参数 . 对于列表的其余元素,该过程以这种方式继续 .
所以在上面的fibonacci示例中,在第一次迭代时,将使用 [10;1]
("first parameter and first item of second parameter")调用该函数,该函数已经给出了不正确的结果 .
我的实现符合定义(和工作)
1 1 {[l;c] l,sum -2#l}/til 10
但我不喜欢它,因为参数 c
从未使用过 .
如何将第一个例子与定义相协调?
谢谢您的帮助
2 回答
/有多种形式,如下所述:https://code.kx.com/q/ref/adverbs
这里使用的具体形式是"repeat" - https://code.kx.com/q/ref/adverbs/#converge-repeat
这里的斐波纳契函数是monadic,即取一个参数(x)
在这种形式中,/将使用提供的参数(即11的列表)运行函数,然后使用该调用的结果运行,然后再使用该调用的结果运行,直到迭代次数达到10 (左边的参数为/)
如果函数是二元函数(即采用两个参数),则提供的定义为true
希望这可以帮助
乔纳森
AquaQ Analytics
左参数是这个例子被视为迭代整数原子(重复) .
请参阅code.kx.com上的coverge-repeat可能会进一步澄清 .