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