바인딩이 기능 프로그래밍에서 코드 가독성을 향상시키는 방법

바인딩이 기능 프로그래밍에서 코드 가독성을 향상시키는 방법

  1. 소개

  2. 시퀀스 미적분학으로 번역

    2.1 산술 표현

    2.2 바인딩하자

    2.3 최상위 정의

    2.4 대수 데이터 및 코타 타 유형

    2.5 일류 기능

    2.6 제어 연산자

  3. 맥락에서 평가

    3.1 재미를위한 평가 컨텍스트

    3.2 핵심 평가에 중점을 둡니다

  4. 타이핑 규칙

    4.1 재미를위한 타이핑 규칙

    4.2 핵심에 대한 타이핑 규칙

    4.3 유형 소리

  5. 통찰력

    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 선형 논리 및 예외의 이중성

  6. 관련 작업

  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

당신은 놓쳤을 수도 있습니다