编辑:
关于上面提到的链接问题,我试图描述一个与上面不同的计算。上面的形式是:
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上的缩进是我的,并且没有效果。