zoukankan      html  css  js  c++  java
  • Y Combinator

    //first self reference
    var fact = function(self){
    	return function(n){
    		if(n == 0) return 1;
    		else return n * self(self)(n-1);
    	}
    }
    console.log(fact(fact)(10));
    
    var fact1 = function(self){
    	return function(n){
    		var f = function(h){
    			return function(x){
    				if(x == 0) return 1;
    				else return x * h(x-1);
    			}
    		}
    		return f(self(self))(n);
    	}
    }
    
    console.log(fact1(fact1)(10));
    
    //take out f of fact1
    var f = function(self){
    	return function(x){
    		if (x == 0) return 1;
    		else return x * self(x - 1);
    	}
    }
    var fact2 = function(self){
    	return function(n){
    		return f(self(self))(n);
    	}
    }
    
    console.log(fact2(fact2)(10));
    
    // abstract Y
    
    var Y = function(f){
    		var g = function(self){
    			return function(n){
    				return f(self(self))(n);
    			}
    		}
    		return g(g);
    }
    console.log(Y(f)(10));
    

      

  • 相关阅读:
    CentOS7.4安装Docker
    责任链模式
    策略模式
    状态模式
    解释器模式
    备忘录模式
    中介者模式
    观察者模式
    迭代器模式
    private、default、protected和public的作用域
  • 原文地址:https://www.cnblogs.com/x1957/p/3291594.html
Copyright © 2011-2022 走看看