Могу я написать {x, a, b} // Do […, #] & вместо Do […, {x, a, b}]?

Я влюблен в Ruby. В этом языке все основные функции фактически являются методами. Поэтому я предпочитаю постфиксную нотацию - когда данные, которые я хочу обработать, размещаются слева от тела функции анонимной обработки, например: array.map {...} . Я считаю, что у этого есть преимущества в том, насколько легко этот код читать.

Но Mathetica, будучи функциональной (да, она может быть процедурной, если хотите), диктует стиль, в котором имя функции помещается слева от данных. Как мы видим в его руководствах, // используется только тогда, когда это какая-то простая функция без аргументов, например list // MatrixForm . Когда Function требуется много аргументов, люди, написавшие руководства, используют синтаксис F [data] .
Это было бы хорошо, но моя проблема в случае F [f, data] , например Do [function, {x, a, b}] . Большинство функций Mathematica (если не все) имеют аргументы именно в этом порядке - [функция, данные] , а не [данные, функция] . Поскольку я предпочитаю использовать чистые функции, чтобы сохранить пространство имен в чистоте, вместо создания множества именованных функций в моем блокноте, аргумент function может быть слишком большим - настолько большим, что аргумент data будет размещать на 5-20 строке кода после строки с вызовом функции.

Поэтому иногда, когда evil Ruby-природа берет меня под контроль, я переписываю такие функции постфиксным способом:

Do[f (x), {x, a, b}]\n{x, a, b} // Do[f (x), #] &

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

  1. это вызывает проблему с выделением синтаксического анализатора Mathematica: x в постфиксной нотации выделяется синим цветом, а не бирюзовым;
  2. каждый раз, когда я заглядываю в руководства по Mathematica, я вижу примеры как этот: Do [x [[i]] = (v [[i]] - U [[i, i + 1 ;; n]]. x [[i + 1 ;; n]] » / U [[i, i]], {i, n, 1, -1}]; , что означает ... черт, они думают, что это легко читать / поддерживать / и т. Д.?!

Итак эти две вещи заставили меня задать этот вопрос здесь: такой ли я плохой мальчик, что использую свой стиль Ruby, и должен ли я писать код, как эти ребята , или это нормально, и я не «Не о чем беспокоиться , и должен ли я писать так, как мне нравится?

8
задан Manishearth 18 January 2013 в 20:40
поделиться