2012-09-13 4 views
3

어리석은 방법에 대한 질문입니다. 여기에 몇 가지 설명이 있습니다. 자바 스크립트에서 람다 미적분을 실험 중이며 약간의 어려움이 있습니다. 나는이 기능 (BTW 숫자 교회 1)이함수는 변수를 주어진 매개 변수로 바꾸지 않고 값을 반환합니다.

을 (당신이 나를 도와 람다 계산법에 대해 알 필요가 없습니다) :

function num1(c) { 
return function(x){ 
    return c(x); 
} 
} 

alert(num1) 

동작 해 예상을하고 똑같은 일을 제공합니다 위.

alert(num1(num1)) 

예기치 않은 동작하며 제공 :

function (x) { 
    return c(x); 
} 

왜 자바 스크립트 함수 NUM1와 'C'를 대체하지 않습니다?

function (x) { 
    return c(x); 
} 

를 그리고이 가정 된 바와 같이, 제 1 C 사실 기능에 의해 대체 된 것을 보여줍니다하지만

alert(num1(num1)(num1)) 

을 제공합니다.

(num1(num1)(num1))= 

(function (x) {return c(x);}(num1= 

c(function num1(c) { 
    return function(x){ 
     return c(x); 
    } 
}) 

그래서 모두 모두는, 코드가하도록되어 일을하지만, 그것은하지 출력하는 기능을 수행하십시오 'C'가 대체되지 않았을 경우 는 다음이 일어 났을 것 'c'가 대체되었습니다. 내가 무엇을 할 수 있을지? 나중에, 나는 더 많은 기능을 할 것이고 'C'가 대체되지 않기 때문에 num1(asd)num1(jkl)을 구별 할 수 없을 것이다.

도움 주셔서 감사합니다.

Someonelse

+0

가 보이는 당신이'Y-combinatorial'를 파악하려고하는 것처럼 ... – SexyBeast

+0

을 내가 알고 Y-combinator와 어떻게 작동하는지 (왜 그런지는 모르겠다.)) 나는 종이에 그것을 사용할 수있다. 나는 실제로 j와 함께 실제로 뭘하고 싶은지 모르지만,이 예제는 실제 문제를 단순화 한 것입니다. S- 및 K-Combinator는 똑같은 어리석은 행동을 경감합니다. – someonelse

+0

[FAQ] (http://stackoverflow.com/faq)에서 질문의 코드 서식을 지정하는 방법에 대해 설명합니다. – Pointy

답변

1

왜 당신이 시도하지 않는 : 그럼

function num1(c) { 
    function rv(x){ 
    return c(x); 
    } 
    rv.showBinding = function() { 
    return c; 
    } 

    return rv; 

} 

:

alert(num1); 
alert(num1(num1).showBinding()); 
관련 문제