Почему «уменьшить» инфиксный оператор в часовне? - PullRequest
2 голосов
/ 08 ноября 2019

В соответствии с этой страницей руководства, мы можем использовать reduce для выполнения сокращения, например суммирования (+):

var a = (+ reduce A) / num;
var b = + reduce abs(A);
var c = sqrt(+ reduce A**2);

и максимального значения / местоположения:

var (maxVal, maxLoc) = maxloc reduce zip(A, A.domain);

Здесь Chapel определяет reduce как инфиксный оператор, а не функцию (например, reduce( A, + )). ИМХО, последняя форма кажется немного более читаемой, потому что аргументы всегда разделяются скобками. Поэтому мне интересно, есть ли какая-то причина для этого выбора (например, чтобы упростить некоторый параллельный синтаксис) или просто вопрос истории (соглашение)?

1 Ответ

3 голосов
/ 08 ноября 2019

Я бы сказал, что ответ - это вопрос истории / конвенции. Многие функции массива и домена Chapel были в значительной степени вдохновлены языком ZPL из Вашингтонского университета, и я считаю, что этот синтаксис был разумно взят непосредственно из ZPL.

В то время у нас не было понятияпередачи таких вещей, как функции и операторы в Chapel, что, вероятно, является одной из причин, по которой мы не рассматривали более функциональный подход. (Даже сейчас первоклассная поддержка функций в Chapel все еще находится в зачаточном состоянии, и я не верю, что у нас есть способ обойти операторов).

Я бы также сказал, что Chapel - это языкэто обычно предпочитает синтаксис для шаблонов ключей вместо того, чтобы использовать больше подход «сделать все похожим на вызов функции / метода» (например, диапазоны поддерживаются посредством буквального синтаксиса и нескольких ключевых операторов вместо использования типа объекта с методами).

Ничто из этого не говорит о том, что выбор, очевидно, был правильным или не может быть пересмотрен.

...