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