Хотя Matlab поддерживает анонимные функции и имеет элементарную поддержку для функционального программирования, он не особенно хорошо поддерживается или идиоматичен. Подход Matlab состоит в том, чтобы вместо этого использовать векторы (имя Matlab для массивов) везде, где это возможно, и использовать функции, которые оцениваются по этим векторам.
Вместо
Walk1D =@ (n) cumsum(steps(n));
, который не работает, потому что аргумент cumsum
(который ожидает вектор) просто steps(n)
(единственный элемент вектора steps
!), Идиоматический подход Matlab заключается в том, чтобы сделать что-то вроде:
Nsteps = 100;
steps = randn(1, Nsteps);
walk1D = cumsum(steps);
и т.д.
Если вам это нужно, эквивалентами Matlab оператору "map" функционального программирования являются cellfun
и arrayfun
.
(Кроме того: наследие Matlab коренится в Fortran, по сравнению с Mathematica, которая вдохновлена Lisp. Анонимные функции в Matlab ограничены простыми выражениями, поэтому часто необходимо использовать традиционную именованную функцию, хранящуюся в отдельной. Я часто чувствую, что функциональные программные конструкции в Matlab в основном новы, хотя иногда они полезны.)