MATLABでカリー化

一度関数型プログラムの考え方に触れると、どの言語でも同じようなことがしたくなってしまいます。
MATLAB は便利ですが、当然関数型ではないので勉強がてらちょっとずつ自作しています。
その過程で、カリー化をしようとしてハマったのでメモ。

結論からいうと、セル配列が使えました。セル配列は型の違うものをひとまとめに扱うしくみで、
取り出すときには小括弧と中括弧の2つの方法があります。
中括弧を使って範囲指定をして取り出すと、多値で答えが帰ってくるので、これを使って curry がつくれました。

function f = curry(f, varargin)
%curry do currying
%   feval(curry(@plus, 1), 10) => 11
%   feval(curry(@strcat, 'a', 'b', 'c'), 'z') => 'abcz'

if nargin >= 2
    xs = varargin;
    f = curry(@(varargin) f(xs{1}, varargin{:}), xs{2:end});
end

第1引数の f をそのまま返値にしているので、 nargin == 1 の場合はそのまま f が返ります。
この辺り、お行儀が良いのかはよくわかりません。明示的に分岐を書いた方が読みやすい気もします。

# 追記
と思ったら、まんま stack overflow に書いてあった。。。