我可以从下面的代码中获得所需的结果,但是可以通过在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]
之前尝试了很多类似/的事情,但会导致长度或类型错误。
答案 0 :(得分:2)
您可以使用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
使用副词自定义功能:
如果要在每对上执行其他操作,则可以结合使用left-left和every-right,并定义函数以在每对上执行操作。
例如,使用自定义函数定义联接操作。
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