如何使用" over"在2个输入列表中,每次从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
谢谢。
答案 0 :(得分:0)
"在"每次都有两个参数,所以三个参数不是一个选项:http://code.kx.com/q/ref/control/#over
为了实现你所提到的,功能和输入必须扭曲:
f:{x+y[0]+y[1]}
(f/)1,flip(2 3;22 33)
答案 1 :(得分:0)
这应该与您描述的完全一致,这是over /
的折叠行为。当使用3个参数时,函数会循环显示y
和z
的列表,将它们应用于前一个表达式的输出。考虑到您提供的数字:
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]