在Octave中定义匿名递归函数的最短方法是什么?


12

我喜欢Octave中的函数式编程,但是在实践中相当笨拙。我想知道定义匿名递归函数的最短方法。

我有一些想法,但我想知道是否有一种方法可以将这些想法组合在一起,使它们变得更短(或同样简短但功能更广泛)。为了解决这个问题,让我们递归递减为零(只是为了使有效负载尽可能简单)。

如果我的推论是正确的,则在以下示例中使用的变量名都不应重叠。所需的函数是q(n),应始终返回零。i用作计数器变量,f是我g在的本地范围中调用的递归函数f

44个字节,“内联定义f

q=@(n)(f=@(g,i){@()g(g,i-1),i}{~i+1}())(f,n)

44字节,“参数列表定义f

q=@(n,f=@(g,i){@()g(g,i-1),i}{~i+1}())f(f,n)

44个字节,“的单独定义f

f=@(i,g){@()g(i-1,g),i}{~i+1}();q=@(n)f(n,f)

41个字节,“作为返回值的所需功能”

f=@(g)@(n){@()g(g)(n-1),n}{~n+1}();q=f(f)

当前的“赢家”是受骗子的答案启发的。但是,鉴于执行此操作的方法范围很广,也许有人可以想到更短的方法组合。

我们的目标当然是使它具有39字节以下的“完整”功能,请在线尝试!

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.