相关疑难解决方法(0)

javascript:递归匿名函数?

假设我有一个基本的递归函数:

function recur(data) {
    data = data+1;
    var nothing = function() {
        recur(data);
    }
    nothing();
}
Run Code Online (Sandbox Code Playgroud)

如果我有匿名功能,我怎么能这样做...

(function(data){
    data = data+1;
    var nothing = function() {
        //Something here that calls the function?
    }
    nothing();
})();
Run Code Online (Sandbox Code Playgroud)

我想要一种方法来调用调用这个函数的函数...我已经看到某个地方的脚本(我记不清哪里)可以告诉你一个被调用的函数的名字,但我记不起任何一个那个信息现在.

javascript recursion scope anonymous-function

112
推荐指数
7
解决办法
6万
查看次数

我无法理解Y-Combinator,所以我试图实现它并最终得到更短的东西,这是有效的.怎么可能?

我无法理解Y-combinator,所以我尝试实现一个在没有本机实现的情况下启用递归的函数.经过一番思考,我最终得到了这个:

Y = ?x.(?v.(x x) v)
Run Code Online (Sandbox Code Playgroud)

哪个比实际的短:

Y = ?f.(?x.f (x x)) (?x.f (x x))
Run Code Online (Sandbox Code Playgroud)

而且,令我惊讶的是,工作.一些例子:

// JavaScript
Y = function(x){
  return function(v){
    return x(x, v);
  };
};
sum = Y(function(f, n){
  return n == 0 ? 0 : n + f(f, n - 1);
});
sum(4);

; Scheme
(define Y (lambda (x) (lambda (v) (x x v))))
(define sum (Y 
    (lambda (f n) 
        (if (equal? n 0) 
            0 
            (+ n (f f (- n 1)))))))
(sum 4)
Run Code Online (Sandbox Code Playgroud)

两个片段按预期输出10(从0到4的总和).

这是什么,为什么它更短,为什么我们更喜欢更长的版本?

javascript recursion scheme functional-programming y-combinator

15
推荐指数
2
解决办法
708
查看次数

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

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

(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
查看次数