我能够从下面的代码中获得所需的结果,但是通过在lambda内使用lambda:
Code:
.up.dic:`a`b!(`ab`cd;`ef`gh);
sd:2019.01.14;
ed:2019.01.15;
({[m;d]{[m;d] 0N!m,d;}[m]@'d}@'raze .up.dic)[;sd+til(ed-sd)+1]
Result:
(`ab;2019.01.14)
(`ab;2019.01.15)
(`cd;2019.01.14)
(`cd;2019.01.15)
(`ef;2019.01.14)
(`ef;2019.01.15)
(`gh;2019.01.14)
(`gh;2019.01.15)
是否有一种方法可以摆脱内在的lambda并通过每个日期
传递每个dict元素{[m;d] 0N!m,d;}[m]@'d}/Can we get rid of this
在外lambda中的 [;sd+til(ed-sd)+1]
之前尝试了很多事情,但会导致长度或类型错误。
您可以使用Cross
q) raze[.up.dic] cross sd+til(ed-sd)+1
`ab 2019.01.14
`ab 2019.01.15
`cd 2019.01.14
`cd 2019.01.15
`ef 2019.01.14
`ef 2019.01.15
`gh 2019.01.14
`gh 2019.01.15
使用副词进行自定义功能:
如果您想对每对进行其他操作,则可以使用每个左侧和每个权利的组合并定义您的功能以在每对上执行操作。
例如,使用自定义的函数加入操作。
q) my_func:{x,y} / x will be item from dict and y will be date from date list
q) raze raze[.up.dic] my_func/:: sd+til(ed-sd)+1