相关疑难解决方法(0)

如何递归地在ES6中编写箭头函数?

ES6中的箭头函数没有arguments属性,因此arguments.callee无法工作,即使只使用匿名函数也无法在严格模式下工作.

箭头函数无法命名,因此无法使用命名的函数表达式技巧.

那么......如何编写递归箭头函数?这是一个箭头函数,根据某些条件递归调用自身等等当然?

javascript recursion ecmascript-6 arrow-functions

36
推荐指数
7
解决办法
1万
查看次数

Y-combinator如何以编程方式计算固定点?

我相信我的理解数学的Y组合子的想法:它返回的功能给出一个固定点F,从而f = Y(F)在那里f满足f == F(f).

但我不明白实际的计算程序是如何明智的?

我们来看一下这里给出的javascript示例:

var Y = (F) => ( x => F( y => x(x)(y) ) )( x => F( y => x(x)(y) ) )
var Factorial = (factorial) => (n => n == 0 ? 1 : n * factorial(n-1))

Y(Factorial)(6) == 720    // => true
computed_factorial = Y(Factorial)
Run Code Online (Sandbox Code Playgroud)

我不明白的部分是如何computed_factorial实际计算函数(固定点)?通过跟踪Y的定义,你会发现它在该部分遇到无限递归x(x),我看不到那里隐含的任何终止案例.然而,奇怪的确回来了.谁能解释一下?

javascript y-combinator

9
推荐指数
1
解决办法
447
查看次数

定点组合器

我是定点组合器世界的新手,我猜他们已经习惯了匿名的lambdas,但我还没有真正使用它们,甚至无法完全绕过它们.

我在Javascript中看到了Y-combinator的例子,但是还没能成功运行它.

这里的问题是,有人可以给出一个直观的答案:

  • 什么是定点组合器(不仅在理论上,而且在某些示例的上下文中,揭示该上下文中的定点究竟是什么)?
  • 除了Y-combinator之外,还有哪些其他类型的定点组合器?

奖励积分:如果示例不仅仅是一种语言,最好也是在Clojure中.

更新:

我已经能够在Clojure中找到一个简单的例子,但仍然发现很难理解Y-Combinator本身:

(defn Y [r]
  ((fn [f] (f f))
   (fn [f]
     (r (fn [x] ((f f) x))))))
Run Code Online (Sandbox Code Playgroud)

虽然这个例子很简洁,但我发现很难理解函数中发生了什么.提供的任何帮助都是有用的.

functional-programming y-combinator anonymous-function higher-order-functions fixpoint-combinators

5
推荐指数
1
解决办法
1296
查看次数

不使用arguments.callee递归调用匿名函数

如何递归地调用匿名函数(从其内部)?

(function(n) {
    console.log(n=n-1);
    // Want to call it recursively here without naming any function
})(20);
Run Code Online (Sandbox Code Playgroud)

javascript

3
推荐指数
1
解决办法
136
查看次数

非递归lambda演算因子函数

如何在不使用lambda演算的递归的情况下编写阶乘函数?这意味着数学符号不能在任何特定的编程语言中实现.

lambda functional-programming lambda-calculus

2
推荐指数
1
解决办法
651
查看次数

使用匿名函数递归

可能重复:
javascript:递归匿名函数?
匿名递归PHP函数

我在想......是否可以使用匿名函数进行递归?

这是一个例子:我需要得到六个字符长的字符串,它可能只包含数字和空格.唯一的规则是它不能以空格开头或结尾.我们检查一下,如果发生这种情况 - 只需在相同的匿名函数上调用递归.怎么样!?

function() {

    $chars   = range(0, 9);
    $chars[] = ' ';
    length   = 6;
    $count   = count($chars);

    $string = '';
    for ($i = 0; $i < $length; ++$i) {

        $string .= $chars[mt_rand(0, $count - 1)];

    }

    $string = trim($string);

    if (strlen($string) !== $length) { // There were spaces in front or end of the string. Shit!

        // Do recursion.

    }

    return $string;

}
Run Code Online (Sandbox Code Playgroud)

php recursion reference anonymous-function anonymous-recursion

1
推荐指数
1
解决办法
2221
查看次数

普通或箭头函数能否以递归方式从其身体中调用自身?

一个正常的自调用函数如下所示:

(function () {
    // Something.
})();
Run Code Online (Sandbox Code Playgroud)

但是,函数可以以某种方式以递归方式调用自身,如下所示:

(function f(i, num) {
    if (num > 0) {
        console.log(i);
        f(i + 1, num - 1);
    }
})(0, 2);
Run Code Online (Sandbox Code Playgroud)

但仍然保持匿名?

ES6箭头功能可以自行调用吗?

(a => {
    // Somehow invoke itself.
})();
Run Code Online (Sandbox Code Playgroud)

javascript recursion function ecmascript-6

1
推荐指数
1
解决办法
557
查看次数