对LAMBDA和投影组合的代码优化,将每个操作应用于传递的ARGS



我能够从下面的代码中获得所需的结果,但是通过在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

最新更新