Используя J, я пытаюсь сделать что-то похожее на следующий пример, показанный на странице 128 Освоение Dialog APL Бернаром Леграном (2009). Мне не удалось найти прямое преобразование этого кода в J, что мне и нужно.
Вот пример:
BHCodes ← 83 12 12 83 43 66 50 81 12 83 14 66 etc... BHAmounts ← 609 727 458 469 463 219 431 602 519 317 663 631...
13.3.2 - First Question
We would like to focus on some selected countries (14, 43, 50, 37, and 66) and calculate the total amount of their sales. Let’s first identify which items of BHCodes are relevant:
Selected ← 14 43 50 37 66 BHCodes ∊ Selected 0 0 0 0 1 1 1 0 0 0 1 1 0 1 0 ⇦ Identifies sales in the selected countries only.
Then we can apply this filter to the amounts, and add them up:
(BHCodes ∊ Selected) / BHAmounts 463 219 431 663 631 421 +/ (BHCodes ∊ Selected) / BHAmounts 2828
+/ (BHCodes e. Selected) # BHAmounts
Для ваших целей здесь APL ∊
— это J’s e.
(Член (В)), а APL /
— это J’s #
(Копировать).
Примечания:
APL ∊
и J's e.
не полностью эквивалентны, поскольку APL ∊
ищет каждый элемент в своем левом аргументе среди элементы своего правого аргумента, в то время как J's e.
ищет каждый основная ячейка. своего левого аргумента в основные клетки своего правого аргумента.
APL /
и J's #
не полностью эквивалентны, поскольку APL /
работает вдоль задней оси, а # J работает вдоль ведущей оси. Однако у APL есть ⌿
, который работает по ведущей оси. Есть еще нюансы, но они здесь не уместны.