ES6中的箭头函数没有arguments属性,因此arguments.callee无法工作,即使只使用匿名函数也无法在严格模式下工作.
箭头函数无法命名,因此无法使用命名的函数表达式技巧.
那么......如何编写递归箭头函数?这是一个箭头函数,根据某些条件递归调用自身等等当然?
我相信我的理解数学的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)
我不明白的部分是如何computed_factorial实际计算函数(固定点)?通过跟踪Y的定义,你会发现它在该部分遇到无限递归x(x),我看不到那里隐含的任何终止案例.然而,奇怪的确回来了.谁能解释一下?
我是定点组合器世界的新手,我猜他们已经习惯了匿名的lambdas,但我还没有真正使用它们,甚至无法完全绕过它们.
我在Javascript中看到了Y-combinator的例子,但是还没能成功运行它.
这里的问题是,有人可以给出一个直观的答案:
奖励积分:如果示例不仅仅是一种语言,最好也是在Clojure中.
更新:
我已经能够在Clojure中找到一个简单的例子,但仍然发现很难理解Y-Combinator本身:
(defn Y [r]
  ((fn [f] (f f))
   (fn [f]
     (r (fn [x] ((f f) x))))))
虽然这个例子很简洁,但我发现很难理解函数中发生了什么.提供的任何帮助都是有用的.
functional-programming y-combinator anonymous-function higher-order-functions fixpoint-combinators
如何递归地调用匿名函数(从其内部)?
(function(n) {
    console.log(n=n-1);
    // Want to call it recursively here without naming any function
})(20);
如何在不使用lambda演算的递归的情况下编写阶乘函数?这意味着数学符号不能在任何特定的编程语言中实现.
可能重复:
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;
}
php recursion reference anonymous-function anonymous-recursion
一个正常的自调用函数如下所示:
(function () {
    // Something.
})();
但是,函数可以以某种方式以递归方式调用自身,如下所示:
(function f(i, num) {
    if (num > 0) {
        console.log(i);
        f(i + 1, num - 1);
    }
})(0, 2);
但仍然保持匿名?
ES6箭头功能可以自行调用吗?
(a => {
    // Somehow invoke itself.
})();
javascript ×4
recursion ×3
ecmascript-6 ×2
y-combinator ×2
function ×1
lambda ×1
php ×1
reference ×1