Multilingualism and MATLAB

Thanks to Numerical Analysis, this quarter’s big new language will turn out to be one not often mentioned by “pure” computer scientists: MATLAB. Starting yesterday, I was tasked with writing a number of small functions to do things like estimate function zeros and values of irrational numbers by a variety of methods (bisection, secant, Newton’s, etc.).

Naturally, wanting these estimations to be as flexible as possible (and seeing the book request Newton’s method applied to several functions in series), I immediately tried to design the estimation function to accept another function as an argument to be evaluated later. In a language with first-class functions, this would be trivial; MATLAB, unfortunately, is not such a language.

Even more unfortunately, I tried several times to find MATLAB first-class functions, or any way to pass a function to another function. Eventually, I stumbled across the answer: function handles.

Essentially, passing MATLAB functions doesn’t promote those functions to first-class citizens; instead, it uses a more C-like approach and gives you a “handle” on the function, much in the way a function pointer might. “Function handle” is a data type in MATLAB, though, so it’s a bit more explicitly defined than C pointers. In addition, handles let you do fun things like declare anonymous functions, which is all but impossible in C.

Take for example this nifty MATLAB definition for an explicit “square” function:

sq = @(x) x^2

Given another function that accepts a handle as an argument, the programmer can then just pass sq as the argument, then within the called function evaluate something like sq(3) and come out with 9, just as expected.

A lot of programmers (myself included) tend to get thrown by this kind of stuff when first encountering a new language. Try to remember not to force one language into the mold of another, or demand features that may simply not be present; instead, grow into the language, picking up idiomatic expressions and design as appropriate while still relating core concepts back to known ideas from other languages.