声明多行匿名函数的正确语法是什么?

时间:2014-01-28 02:56:00

标签: matlab

编辑:

关于上面提到的链接问题,我试图描述一个与上面不同的计算。上面的形式是:

func1 >> func2 >> func3

其中>>表示继续。最重要的是,func2不会绑定到func1的任何变量输出,依此类推。

我的功能是:

func1 >>=@ x func2(x) >>=@ y func3(y)

其中>>=@表示从func1和func2继续, func2绑定到func1的输出。所以关键是变量赋值需要在函数调用之间保持不变。

问题正确。

我有这个函数声明:

function[y] = distR3(x,c)
    a = bsxfun(@minus, x, reshape(c, [1 1 3]));
    b = a .* a;
    c = b(:,:,1) + b(:,:,2) + b(:,:,3);
    y = sqrt(c);
end

我想转换为一些匿名函数,也许就像:

% Incorrect syntax
distRN = @(x,c) 
    a = bsxfun(@minus, x, reshape(c, [1 1 3]));
    b = a .* a;
    c = b(:,:,1) + b(:,:,2) + b(:,:,3);
    y = sqrt(c);
    return y

这里要注意的关键是函数中有多行,具有变量赋值和可能的变量就地更新。

这样的事情可能吗?

编辑编辑:

我似乎找到了一个使用“高阶函数”的答案。这是最终的代码:

distRN = @(x,y) sqrt(c((b(a(x,y)))));
   a  = @(x,c) bsxfun(@minus, x, reshape(c, [1 1 3]));
   b  = @(a) a .* a;
   c  = @(b) b(:,:,1) + b(:,:,2) + b(:,:,3);

请注意a,b和c上的缩进是我的,并且没有效果。

0 个答案:

没有答案