2017-11-24 14 views
0

저는 통역사를 만들고 있으며 이제는 클로저를 처리하기 위해 구현해야 할 시점에 있습니다. 나는이 개념을 잘 이해하지만, 왜 그들이 어떻게 설계되었는지에 대해 질문을합니다. 변수가 폐쇄의 인스턴스 동안 저장됩니다 클로저 및 방법론 이해

  • 환경에 바인딩되는 논리의

    1. 변수
    2. 몸 : 폐쇄 설계 방법의 측면에서

      은/3 일이있을 필요 해석 이것은 클로저 변수가 평가 될 때 바인딩 될 본문 내에 존재하는 자유 변수를위한 것입니다.

    나는이 모든 것들이 왜 필요한지 이해한다. 나는 closure의 생성 순간에 대체가 똑같은 일을 할 때 세 번째 항목이 왜 필요한지에 대해 궁금해한다. 내가 회계를 못하니?

    기본적으로 환경 변수 전체를 전달하는 대신 클로저 생성시 자유 변수를 각각의 환경 값으로 대체하지 않는 이유는 무엇입니까?

  • +1

    당신이 작성하는 경우 자바 스크립트 인터프리터 또는 다른 언어에 대한 인터프리터 (JavaScript 또는 JavaScript 인터프리터 또는 다른 언어로 된 플러그인)가 있습니까? 그것은 당신의 질문에서 아주 명확하지 않습니다. –

    +0

    저는 인터프리터를 자바 스크립트로 쓰고 있습니다 만 일반적인 의미로 묻습니다. 언어는 부적합합니다. – James

    +1

    캡처 된 (사용 가능한) 변수의 값은 클로저가 실행되기 전에 변경 될 수 있습니다. 사실 두 개의 클로저는 동일한 변수를 포착하여 수정할 수 있으므로 일종의 상호 통신이 가능합니다. – rici

    답변

    1

    나는 ... 그것은 오 잘하지만, 조금 늦게 같아요 당신의 계산 모델 (예를 들어, 평가 전략)에 따라

    . [변수에 묶여 효과를 얻을 수있는] 모든 데이터 구조가 사용자의 언어로 변경되지 않으면 메서드가 작동해야합니다. 순수 lexical lisp dialects (예 : scheme의 기능적인 부분 집합)와 잘 어울립니다.

    경우가 작동하지 않을 수 있습니다 : 이미 댓글에서 언급 한대로이 참조로 인수를 전달

    • . 가치에 의한 호출은 괜찮습니다. 또한 불변 객체에 대한 참조가 좋습니다.
    • 환경 바인딩 및/또는 조회에서 부작용이 발생합니다. 그것은 다소 이국적 일 것입니다,하지만 누가 압니까?

    또한 전체 환경, 함수 본문의 자유 변수 (쉽게!)를 둘러 쌀 필요가 없습니다.

    유일한 이유는 몸 + 환경 등의 폐쇄를 구현하기위한 [나는 알고있다은]입니다

    • 당신이 변경 가능한 객체에 대한 참조를 통과 할 수 있습니다. 이것은 i.a. 일어난다. js와 python에 사전 포함. 시간이 지남에 따라 클로저가 바뀌는 것은 다소 무서운 일이지만, 오 잘.

    • 대체 기능을 쓸 필요가 없습니다. 올바른 범위를 유지해야한다는 것을 염두에 두십시오. 따라서 평가 함수 [계산 모델이 대체 모델 인 경우]를 닮아야합니다. 또한 값의 미묘한 본성이 있습니다 : 적용 가능한 순서 ("열망하는 평가")의 경우 신체의 가치를 대체 할 때, 가치가있는 사람이 표현으로 들어 올려 져야합니다 (어떤 경우에 당신이 LISP 변종, 심볼에 대해 생각해보십시오 - 당신은 값 HI!을 대신하지 않고 표현식 (quote HI!)을 사용합니다. 대부분의 LISP에서 숫자 나 진리 값처럼 모든 데이터 구조가 평가 될 경우에는 적용되지 않습니다.이것들은 일반적으로 문제는 아니지만 통역사에게 약간의 복잡성을 가져오고 은 간단합니다..

    • 바운드 값은 메모리를 많이 소비 할 수 있으며 둘러싸는 변수는 두 번 이상 [자유 변수로] 발생합니다. 신체가 상당히 커질 수 있습니다 (예 : 값이 비트 맵 또는 사운드 샘플 또는 일부임). 거대한 매트릭스 또는 ... 당신은 그림을 얻는다). 그것은 게으른 평가와 계산 중복과 비슷한 문제이지만 시간이 아닌 wrt 메모리입니다. 이것은 또한 컴퓨터 메모리가 크기 때문에 일반적으로 문제가되지 않습니다.

    나는 깰 수있는 다른 어떤 아이디어가 부족하지만, 한 당신은 당신이 그것을 구현하고 [경우 까다로운 경우를 시도해야한다 (등식 추론에 의해) "종이에"당신의 계산 모델을 확인로하지 않으면 이들 중 어느 하나라도 적용됨] : 부작용, 지연 평가, 참조, 변경 가능한 객체, 위의 조합. 그들은 장애물이 아니며, 점검할만한 곳입니다. 호프가 도움이됩니다. 통역관에게 행운이 있기를 바랍니다.

    PS 당신이 이런 종류의 물건에 대해 생각 defunctionalization 확인하고자 (Danvy에 의해 "Defunctionalization at Work" 및 닐슨 꽤 접근 읽기, 그리고 당신이 어떤 영감을 얻을 첫 번째 부분에 괜찮을 것)

    +0

    답변 해 주셔서 감사합니다! 감사합니다. – James