Разница в производительности между функциями и сопоставлением с образцом в Mathematica

Таким образом, Mathematica отличается от других диалектов лиспа, потому что стирает границы между функциями и макросами. В системе Mathematica, если пользователь хочет написать математическую функцию, он, скорее всего, будет использовать сопоставление с образцом, например f [x _]: = x * x вместо f = Function [{x}, x * x] , хотя оба будут возвращать один и тот же результат при вызове с f [x] . Насколько я понимаю, первый подход эквивалентен макросу lisp и, по моему опыту, предпочтителен из-за более лаконичного синтаксиса.

Итак, у меня есть два вопроса: есть ли разница в производительности между выполнением функций и сопоставлением с шаблоном / макросом. подходить? Хотя часть меня не удивится, если функции действительно будут преобразованы в какую-то версию макросов, чтобы можно было реализовать такие функции, как Listable .

Причина, по которой меня волнует этот вопрос, заключается в том, что недавно был задан набор вопросов (1) (2) о попытках отловить ошибки Mathematica в больших программах. Если бы большая часть вычислений была определена в терминах функций, мне кажется, что отслеживать порядок оценки и место возникновения ошибки было бы проще, чем пытаться отловить ошибку после того, как ввод был перезаписан последовательным применением макросов. / шаблоны.

20
задан Community 23 May 2017 в 12:14
поделиться