Как каждый оператор оптимизируется интерпретатором APL?

Мне интересно, должен ли я интенсивно использовать каждый оператор при использовании APL или я должен попытаться найти другое решение для данной проблемы?

Как оптимизируется использование этого оператора в APL?

2 ответа

Решение

Вместо того, чтобы писать что-то вроде

1 +" 2 x" 3|" (1 2 3) (4 5 6)    // sorry, no apl chars

Я бы написал

{1 + 2 x 3 | omega}" (1 2 3) (4 5 6)

или же

foo" (1 2 3) (4 5 6)

где foo содержит вычисления.

Другими словами, избегайте цепочки последовательных каждой операции, когда функции могут быть объединены. Dyalog DFNs {...} обеспечивают отличный способ сделать это.

Но, прежде всего, я бы сначала попытался решить эту проблему наиболее естественным способом, не думая о том, есть ли обходной путь, который работает быстрее. Если решение достаточно хорошее, то есть оно работает адекватно, и вы и ваши коллеги могли бы понять его в будущем, я бы оставил его в покое.

В большинстве случаев каждый из них не будет иметь такую ​​же высокую производительность, как решение для массива, которое не использует каждое из них, но иногда это самый простой и понятный способ кодирования сложного выражения. Но если есть два способа сделать задачу примерно одинаковой ясности и сложности, и один из них не использует каждый, я бы предпочел выбрать этот. Если это имеет значение, конечно, инструмент и мера. Если это не работает с довольно большими данными, это, скорее всего, не будет иметь значения. Приведенный выше комментарий о каждом из них, используемых с вызовами к длительным операциям или внешним службам, является точным.

Другие вопросы по тегам