바인딩이 기능 프로그래밍에서 코드 가독성을 향상시키는 방법
링크 표
-
소개
-
시퀀스 미적분학으로 번역
2.1 산술 표현
2.2 바인딩하자
2.3 최상위 정의
2.4 대수 데이터 및 코타 타 유형
2.5 일류 기능
2.6 제어 연산자
-
맥락에서 평가
3.1 재미를위한 평가 컨텍스트
3.2 핵심 평가에 중점을 둡니다
-
타이핑 규칙
4.1 재미를위한 타이핑 규칙
4.2 핵심에 대한 타이핑 규칙
4.3 유형 소리
-
통찰력
5.1 평가 컨텍스트는 일등석입니다
5.2 데이터는 Codata의 이중입니다
5.3 Let-Bindings는 운영자를 제어하는 이중입니다
5.4 사례 변환
5.5 직간접 소비자
5.6 Call-by-Value, Call-by-Name 및 Eta-Laws
5.7 선형 논리 및 예외의 이중성
-
관련 작업
-
결론, 데이터 가용성 진술 및 승인
A. 시퀀스 미적분학과의 관계
B. 재미를위한 규칙을 입력합니다
C. 레이블/Goto의 운영 의미
참조
2.2 바인딩하자
Let-Bindings는 복제를 제거하고 코드를 더 읽기 쉽게 만들 수 있기 때문에 중요합니다. 이 섹션에서 우리는 추가적인 이유를 위해 재미있게 바꾸는 것을 소개합니다. 그들은 우리가 두 번째 구성을 𝜆𝜇𝜇 ~-칼갈루스에게 그 이름을 부여하는 두 번째 구성을 소개 할 수있게합니다.
재미있는 let 바인딩은 표준이며, 신체의 변수 𝑥에 대한 값을 용어 인 값을 대체하여 평가됩니다. 재미있는 왼쪽 바인딩의 아날로그는 핵심의 바인딩으로 변수를 바인딩하며, 바인딩의 본문이 진술이라는 차이가 있습니다. 바인딩은 우리가 이미 소개 한 𝜇 결합의 정확한 듀얼임을 쉽게 알 수 있습니다.
핵심과 𝜇 ~ 바인딩을 통해 우리는 잠재적 인 문제, 즉 형식의 진술에 직면해야합니다. 𝜇𝑥. ~ 2𝑠. 이러한 진술은 잠재적으로 두 가지 모두로 줄일 수 있기 때문에 중요한 쌍이라고합니다. [𝜇𝑥.𝑠 ˜ 2/𝛼] 그리고 𝑠2 [𝜇𝛼.𝑠1/𝑥] 비유증의 원천이 될 수 있습니다. 규칙을 면밀히 검사하면 우리는이 함정을 피하고 항상 진술을 𝑠1로 평가합니다. [𝜇𝑥.𝑠 ˜ 2/𝛼]. 우리는 진술을 𝑠2로 줄일 수 없습니다. [𝜇𝛼.𝑠1/𝑥] 값 만 변수로 대체 할 수 있고 𝜇𝛼.𝑠1은 값이 아닙니다. 이 제한은 let 바인딩의 평가에 대한 제한을 정확하게 반영합니다. 다시 말해, 우리는 콜 별 평가 순서를 사용합니다. 우리는 중요한 쌍과 5.6 절에서 다른 평가 순서와 어떻게 관련이 있는지를 다룰 것입니다.
산술 표현식 2 * 2가 한 번만 평가되었음을 알 수 있습니다. 이는 정확히 콜별로 우리가 기대하는 것입니다.
2.3 최상위 정의
우리는 두 가지 이유로 재귀적인 최상위 정의를 재미와 핵심에 소개합니다. 그들은 우리가 더 흥미로운 예를 쓸 수있게하고 재귀적인 호출이 어떻게 처리되는지에 대한 차이를 보여줍니다. 확장자는 정의 2.4에 지정됩니다.
최상위 정의는 인수로 전달되거나 결과적으로 반환 될 수 없기 때문에 나중에 소개 될 일류 기능과 혼동되어서는 안됩니다. 그것들은 그러한 최상위 정의 목록으로 구성된 프로그램의 일부입니다. 언어에 소비자가 포함되어 있지 않더라도 호기심이 흥미롭게 공변 할 수있는 최상위 정의도 논쟁으로 간주합니다. 지금은 무시할 수 있습니다. 소개의 예제를 기억한다면 라벨을 전달하는 데 사용한다는 것을 기억할 수 있지만 2.6 절에 해당 구성 만 공식적으로 소개합니다.
우리는 프로그램에서 본문을 찾아 내고 정의 본문의 매개 변수에 대한 호출 주장을 대체함으로써 최상위 정의의 호출을 평가합니다. 최상위 정의의 본문은 재미의 용어이며 핵심의 진술입니다. 이 차이는 우리가 번역 할 때 모든 최상위 정의에 추가 매개 변수를 추가 해야하는 이유를 설명합니다. 이 매개 변수 correspond는 일반적으로 기능을 연속 통과 스타일로 변환 할 때 추가 연속 인수에 해당합니다. 또한 핵심에서 최상위 정의의 본문이 생산자가되어야한다고 명시 할 수있었습니다. 우리는 결국 코어를 기계 코드로 변환 할 때 모든 최상위 정의가 함수 통화 스택을 구축하지 않고 인수와의 점프 대상이되기를 원하기 때문에 그렇게하지 않습니다. 다음 예는 이것이 어떻게 작동하는지 보여줍니다.
예 2.3. 최상위 정의를 사용하여 Core의 계승 기능을 나타낼 수 있습니다.
논증의 경우 ⌜1ument 이것은 다음과 같은 방법으로 평가합니다.
평가의 지점 ( *)에서 이제 우리는 재귀 호출이 어떻게 평가되는지 확인할 수 있습니다. 재미있게 재귀적인 호출은 양식 1 * FAC (0)를 가지며 함수 스택이 필요하지만 핵심에서는 소비자와 함께 FAC의 정의로 이동할 수 있습니다. ~ * ((1⌝, 𝑟; ⋆)는 재귀 호출의 결과가 변수 𝑟에 바인딩 된 다음 ⌜1⌝에 곱해야한다는 정보를 포함하는 추가 인수로서의 추가 인수로서. 이 소비자 주장은 연속 통과 스타일의 연속에 해당하며 (이와 같은 의미에서는 재 구선 스택으로 간주 될 수 있음) CPS 기반 중간 표현 및 컴파일러에 사용되는 기본 기술을 구현에 적용 할 수 있습니다.
저자 :
(1) 독일 튜빙 겐 대학교 데이비드 바인더;
(2) 독일 튜빙 겐 대학교 마르코 츠 첸케;
(3) 독일 튜빙 겐 대학교 마리우스 뮬러;
(4) 클라우스 오스터 만, 독일 튜빙 겐 대학교.
Pexels 에서이 분리에 의해 리드 이미지.
Post Comment