tl; dr; 유형의 연속을 통해 무엇보다 중요한 추상화
연속은 입력 및 출력 유형입니다.
비프로 시저 기반 연속에 가장 가까운 것은 Haskell 의 연속 모나드 가 유형으로 표현되기 때문에 많은 함수가 유형과 상호 작용하여 인터럽트, 재개, 역 추적 등을 수행하는 데 사용될 수 있습니다.
Cont
모나드 추상화를 "상위 추상화"로 얻는 하스켈 의 타입과 같은 타입으로 클로저를 캡슐화 할 수 있으며, 연속체를 타입 대신에 타입 으로 볼 때 얻는 연속체에 대한 다른 형태의 추상화 가 있습니다. 단순히 절차 , 예를 들어
- 유형이 법에 따라 단일체 가되는 경우 두 가지 연속을 사용하고 둘 사이의 대안을 수행 할 수 있습니다.
- 클로저를 functor 의 법칙에 위배되는 유형으로 캡슐화하면 유형에 대해 추상화하여 연속의 입력 또는 출력 유형을 변경할 수 있습니다.
- 응용 함수 의 법칙을 따르는 유형으로 클로저를 캡슐화하는 경우 입력 유효성 검사 또는 입력 변환과 같은 기능을 사용하여 연속을 임의로 부분적으로 적용하거나 꾸밀 수 있습니다.
폐쇄 대 절차
하루가 끝나면 기본적으로 맞습니다. 연속은 "프로 시저"이지만, 오히려 폐쇄라고합니다. 종종 연속은 바운드 환경을 포함하는 일류 폐쇄로 가장 잘 표현됩니다. 순수한 기능적 언어에서는 참조가 없기 때문에 이것이 합리적이지 않다고 말할 수 있습니다. 이것은 사실이지만 값을 묶을 수 있고 단일 할당은 값과 참조를 묶는 것과 똑같은 것을 만듭니다. 이것은 Haskell에서 발생합니다.
(\x -> \y -> insideYIcanAccess x (and y))
기술적으로 최고 수준의 클로저를 부족할 수 바인딩 환경을 묶어야 할 수있는 능력이 부족하지만, 그렇다하더라도이 인 언어 일부 폐쇄 사용할 수 있습니다 환경 (일반적으로 전역).
따라서 연속을 다음과 같이 설명하는 것이 더 정확하다고 말합니다 . 특정 방식으로 사용되는 클로저.
결론
의 질문에 "절차 이외의 방법으로 연속 구현 가능한인가?" 아니요. 퍼스트 클래스 함수 가없는 경우 실제로 계속할 수 없습니다 (예 : 함수 포인터는 퍼스트 클래스 함수로 계산되므로 임의의 메모리 액세스로 충분할 수 있음).
지금의 질문에 "절차보다 더 추상적 인 방법으로 계속을 표현하는 어떤 방법이 있습니까?" 유형으로 표현하면 더 큰 추상화를 제공하여 연속을 매우 일반적인 방식으로 처리하여 연속을 실행하는 것보다 더 많은 방식으로 연속과 상호 작용할 수 있습니다.