문제

나는 이론적 인 컴퓨터 과학 수업에 대한 강의 계획서를보고 있으며 상황이없는 문법 제목 내에서 "폐쇄 속성"을 나열합니다. 나는이 주제에 대한 나의 교과서를 살펴보고 거의 발견하지 못했습니다. 그것이 가지고있는 작은 것은 현재 내 머리 위로 약간 위에 있습니다 (아직 코스를 수강하지 않았습니다). 그러나 나는 조금 이해합니다.

컨텍스트 자유 문법 내에서 폐쇄에 대한이 아이디어가 기능 프로그래밍 내에서 폐쇄에 대한 아이디어와 동일하거나 관련이 있는지 궁금합니다. 그것은 문법을 결합하고 내가 알 수있는 한 겹침을 해결하는 것에 대해 이야기합니다. 내가 아직 이해하지 못하는 책 안에 섹션에는 많은 부분이 있으므로 이러한 아이디어가 같은지 확실하지 않습니다.

(조금 더 문맥 : 저는 교수에게 코스를 Perl에서 Ruby 또는 Python으로 전환 할 수 있는지 묻는 교수에게 이메일을 쓰고 있습니다. 이러한 개념이 관련되어 있으면 Perl 위에 Ruby를 사용해야 할 또 다른 이유가 될 수 있습니다.)

도움이 되었습니까?

해결책

"클로저"라는 용어는 다양한 방법으로 사용되며, 대부분 수학적 완성 개념으로 추적합니다.

  • 연산자는 해당 연산자를 세트의 값에 적용하면 항상 주어진 세트에서 값을 생성하는 경우 값 세트를 "닫습니다". 예를 들어, 첨가는 정수를 통해 닫히지 만 디비전은 그렇지 않습니다 (4 / 2는 필수적이지만 5 / 2는 그렇지 않습니다). 따라서 정수의 추가는 부서가 아니라는 의미에서 어떻게 든 "완전한"것입니다.

  • 관계의 "전이"폐쇄는 여러 응용 프로그램을 따르면 관계를 "완료"합니다. 일상적인 용어로, ""의 후손 "의 개념은 관계의 전이 폐쇄"의 자녀입니다.

  • EG는 기능적 "클로저"가 자유 변수를 해결하는 방법을 지정하는 "완료"입니다. 의사 코드 표현식에서 :

    bump = function(x) (x + y)
    

    x 논쟁입니다 bump, 그러나 정의는 해결의 문제를 "공개"하는 것 같습니다. y. 반면에, 우리가 정의하면 :

    bumper = function(y) (function(x) (x + y))
    

    그런 다음 호출 bumper 원래 인수를 추가하는 함수를 반환합니다 bumper 생성 된 기능의 인수에 :

    add3 = bumper(3)
    

    정의와 동일합니다.

    add3 = function(x) (x + 3)
    

    중첩 된 정의는 정의 지점에서 사용 가능한 변수를 "폐쇄"(또는 완료)합니다.

따라서 실제로 "폐쇄"의 사용은 다른 특정한 의미를 가지며 언뜻보기에는 관련이없는 것처럼 보이지만 미묘한 근본적인 관계가 있습니다.

다른 팁

클로저 속성은 다음과 같습니다. L과 M이 컨텍스트가없는 언어라면 L | M도 마찬가지입니다. 기능 폐쇄는 일류 기능을 구현하는 방법입니다. 아니, 그들은 서로 관련이 없습니다.

그렇다면 왜 같은 이름입니까? 함수 폐쇄는 자유 변수를 '폐쇄'합니다.

def adder(n): return lambda m: n + m

여기서 n은 람다의 자유 변수입니다. LISP는 원래이 이름을 강조합니다 그렇지 않았다 무료 변수를 닫습니다. 내부 기능을 호출 할 때 스택에있는 바인딩에서 값을 가져갑니다.

수학의 속성에 대한 폐쇄는 조금 더 분명합니다. 작업 중에 세트가 닫히면 해당 세트 내에 해당 작업을 적용하면이를 벗어나지 않습니다. 정수를 추가하면 여전히 정수입니다.

다리우스는 맞다. "클로저 속성"은 "기능 폐쇄"와 아무 관련이 없습니다. 돌아 다닐 말이 너무 많습니다 :-(

클로저 특성에 대한 아이디어는 컴퓨터 과학 전체에 적용되지만 다른 클래스의 언어에 많이 적용됩니다. 발화를 스캔하거나 인식하기 위해 다른 기술이 필요하기 때문에 다른 종류의 언어가 중요합니다. 예를 들어, 정규 표현식은 예약 된 단어가 있는지 여부를 알려줄 수 있지만 균형 잡힌 괄호가있는 표현이 있는지 알 수는 없습니다. 컨텍스트가없는 문법이 필요합니다.

사람들은 일반적으로 특정 langauge를 복용하고 다른 언어와 교차하거나 연합하거나 단순히 언어를 보완하는 경우에도 관심이 있습니다. 같은 수업에서 다른 언어를 얻습니까? 예를 들어, 그 토큰과 정확히 일치하는 정규 표현을 작성할 수 있습니까? ~ 아니다 예약 된 단어? 일반 언어가 보완하에 닫히기 때문에 울부 짖는 "예"에 대답 할 수 있습니다. 즉, 일반 언어의 보완 자체는 일반 언어이기 때문입니다. 이것은 폐쇄 속성의 예입니다. 일반적으로 증거는 건설적입니다. 즉 존재합니다 예약 된 단어가 아닌 모든 토큰을 설명하는 정기적 인 표현, 폐쇄 속성의 증거는 당신에게 방법을 알려줍니다. 찾기 그런 정규 표현.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top