【问题标题】:KDB+/Q - over (/) 2 lists of valuesKDB+/Q - over (/) 2 个值列表
【发布时间】:2016-08-14 21:26:11
【问题描述】:

如何在 2 个输入列表上使用“over”,每次从 2 个列表中选择 1 个元素?

例如,有:

(+/)[1;2 3] = +[+[1;2];3] = 6

如何做类似的事情:

f:{x+y+z};

(f/)[1;2 3;22 33] = f[f[1;2;22];3;33] = 61

谢谢。

【问题讨论】:

  • 过度行为与您在两个示例中提到的完全相同,并且会给您预期的结果。你在这方面面临什么问题?

标签: functional-programming kdb q-lang


【解决方案1】:

这应该完全按照您的描述工作,这是over / 的折叠行为。当它与 3 个参数一起使用时,函数会循环遍历 yz 的列表,并将它们应用于前一个表达式的输出。考虑到您提供的数字:

x:1
y:2 3
z:22 33

维基页面将其描述为:

f[f[… f[f[x;y0;z0];y1;z1]; … yn-1;zn-1];yn;zn]

什么是伪代码看起来像:

res = x + y[0] + z[0]    // pass this value forward
    = res + y[1] + z[1]

【讨论】:

    【解决方案2】:

    "over" 每次需要两个参数,所以三个参数不是一个选项:http://code.kx.com/q/ref/control/#over

    要实现你提到的,函数和输入必须被扭曲:

    f:{x+y[0]+y[1]}
    (f/)1,flip(2 3;22 33)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    相关资源
    最近更新 更多