Оптимизация кода для комбинации лямбды и проекции, в которой каждая операция применяется для переданных аргументов - PullRequest
0 голосов
/ 21 мая 2019

Я могу достичь желаемого результата из приведенного ниже кода, но используя лямбду внутри лямбды:

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)

Есть ли способ, которым мы можем избавиться от внутренней лямбды и передать каждый элемент dict с каждой датой

{[m;d] 0N!m,d;}[m]@'d}/Can we get rid of this

Перепробовал много вещей, как каждый, /: до [;sd+til(ed-sd)+1] во внешней лямбде, но это привело к длине или ошибке типа.

1 Ответ

2 голосов
/ 21 мая 2019

Вы можете использовать крест

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
...