Составление глаголов сложения и деления по спискам - PullRequest
2 голосов
/ 19 июня 2020

Если data =: 3 1 4 и frac =: % +/, почему % +/ data дает 0.125, а frac data дает 0.375 0.125 0.5?

1 Ответ

5 голосов
/ 19 июня 2020

%+/ 3 1 4 - это «сумма, затем найдите обратную величину этой суммы», то есть:

   +/ 3 1 4
8
   % 8       NB. same as 1%8
0.125

Но если вы определите frac =: %+/, тогда %+/ станет группой из двух глаголов, изолированных от их аргументы (также известные как неявное определение), то есть хук :

   (%+/) 3 1 4
0.375 0.125 0.5

который читается как «сумма, затем разделите исходный вектор на эту сумму»:

   +/ 3 1 4
8
   3 1 4 % 8
0.375 0.125 0.5

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

   frac =: 3 : '%+/y'
   frac 3 1 4
0.125

, либо составить % и +/, например, с на вершине соединение или умное использование диади c вилка с закрытая левая ветвь:

   %@(+/) 3 1 4
0.125
   ([:%+/) 3 1 4
0.125
...