首页 文章

q - 带/的递归

提问于
浏览
4

在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 回答

  • 1

    /有多种形式,如下所述:https://code.kx.com/q/ref/adverbs

    这里使用的具体形式是"repeat" - https://code.kx.com/q/ref/adverbs/#converge-repeat

    这里的斐波纳契函数是monadic,即取一个参数(x)

    在这种形式中,/将使用提供的参数(即11的列表)运行函数,然后使用该调用的结果运行,然后再使用该调用的结果运行,直到迭代次数达到10 (左边的参数为/)

    如果函数是二元函数(即采用两个参数),则提供的定义为true

    希望这可以帮助

    乔纳森

    AquaQ Analytics

  • 1

    左参数是这个例子被视为迭代整数原子(重复) .

    请参阅code.kx.com上的coverge-repeat可能会进一步澄清 .

相关问题