【问题标题】:To do beta reduction in Matlab?在 Matlab 中做 beta 减少?
【发布时间】:2013-10-23 12:48:22
【问题描述】:

如何在 Matlab 中进行如下的 beta 缩减?

我的目标是避免重复分配和懒惰评估的事情——可能与问题multiple step anonymous functions 有关。

显然,大多数功能特性仅在Matlab2013B 中支持。

【问题讨论】:

  • 您关于函数式编程的链接指的是符号工具箱,而不是标准的 matlab。 matlab 本身对函数式编程的支持有限(anonymous functionsmapping 函数到数组。这对你来说足够了吗?
  • @hhh 你能澄清一下为什么丹的回答不合适吗?你的问题似乎没问题。

标签: matlab functional-programming lambda lambda-calculus


【解决方案1】:

这是你的意思吗:

x = 3;
f = @(y)(x+x*y);

现在f(y) 是函数3+3*y

所以你可以把它放在一个循环中,例如:

f = {};
for x = 1:5
   f{x} = @(y)(x+x*y);
end;

然后为x 的每个值找到f(2)

cellfun(@(y)y(2), f)

ans =   
    3    6    9   12   15

【讨论】:

  • @hhh 我不明白这有什么关系?请张贴链接。
  • @hhh 你打开 MuPAD 了吗?你有符号工具箱吗?我仍然看不到与您的 OP 的相关性
  • @hhh 你可以做一个 if 语句:blogs.mathworks.com/loren/category/functional-programming
  • 你的意思是 iif = @(varargin) varargin{2*find([varargin{1:2:end}], 1, 'first')}(); hh=@(x)iif(x==1, x, 0); hh(1); 有效,但 hh(1000) 无效?!
  • @hhh 您是否要检查号码是否为1?那你应该用hh=@(x)iif(x==1, x, true, 0);,我加的true就是else子句。我仍然不明白这与您的 OP 有什么关系。我的回答肯定回答了你关于如何制作 lambda 函数的实际问题?
【解决方案2】:

重申 Dan 的回答,这就是我在 Octave 中得到的:

octave:1> f = @(x) @(y) x + y
f =
   @(x) @(y) x + y

octave:2> g = f (2)
g =
   @(y) x + y

octave:3> g (3)
ans =  5

但我不知道 Matlab...

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2020-06-15
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多