람다 미적분과 프로그래밍 언어의 관계는 무엇입니까? [닫은]

나는 내년에 컴퓨터 과학에서 첫 해 (대학에서)를 시작하고 있으며 대부분 C로 씁니다. 나는 검색을 시도했지만 내가 찾은 것의 대부분은 람다 미적분학에 대한 지식을 가정합니다. 람다 미적분학이 번식에서 단일 가변 미적분학보다 훨씬 더 유용한 것으로 간주되는 이유는 무엇입니까? 람다 표현과 기능적 프로그램 사이에는 관계가 있습니까? 프로그래밍 언어의 개발에 영향을 준 것은 람다 미적분학에 관한 Alonzo Church의 작업 이었습니까?

학교 외부의 모든 사람들은 계속 그것에 대해 화를 내며, 배우고 자하는 열망과 그것이 프로그래밍 및 프로그래밍 언어에 대한 이해와 직접적으로 관련되어 있음을 알면서도 그들이 무엇에 대해 이야기 할 것인지 전혀 모른다.



답변

Lambda 미적분은 흥미롭고 우아하며 기능적 프로그래밍 언어를 이해하기가 훨씬 쉽습니다. 그러나 일반적인 CS 학사 과정에서 LC를 만나지 않아도되므로 지금 배울 필요가 없습니다. Lambda 미적분을 다시 방문하기 전에 먼저 기능 언어를 실험 해 보는 것이 좋습니다. 나는 OCaml이 C 프로그래머를위한 함수형 프로그래밍의 좋은 출발점이라고 생각하며 Scheme은 Lambda 미적분학을 시작하기에 좋은 출발점이라고 생각합니다.

Lambda 미적분학은 미적분학과 관련이 없습니다 (대신 분석이라고 함). 일반적으로 미적분학은 “공식 시스템”, 즉 무언가를하는 일련의 규칙입니다. 미분 미적분은 값 변경에 관한 규칙을 제공하지만 Lambda 미적분의 규칙은 계산 자체를 설명합니다. 이 기본 규칙을 통해 임의의 계산, 부울, 정수 또는 목록과 같은 데이터 표현을 만들거나 조건부 또는 루프와 같은 제어 흐름 구성을 만들 수 있습니다. LC는 Turing Machines와 동일하지만 두 모델의 강도가 다릅니다.

Lambda Calculus는 프로그래밍 언어에 엄청난 영향을 미쳤습니다. 구현 될 두 번째 고급 언어는 Lisp로, LC를 프로그래밍 언어로 직접 인코딩하는 것으로 이해 될 수 있습니다. 이 “기능적 프로그래밍”은 프로그래밍 언어의 진화에 막대한 영향을 미칩니다. 익명 함수, 함수 포인터, 클로저 (중첩 함수), 가비지 수집, 변수 범위, 메타 프로그래밍, 형식 시스템의 발전, 형식 유추, 해석 된 언어, 동적 형식 언어, 개체 지향 프로그래밍과 같은 기능은 모두 큰 부분에 있습니다. 프로그래밍 언어의 기능 프로그래밍 분기 새로운 (비 학술적) 프로그래밍 언어는 Lisp가 이미 수십 년 동안 가지고 있었던 기능 만 추가한다는 농담이 있습니다.

그 외에도 Lambda 미적분학 및 기타 관련 미적분학은 프로그래밍 언어 이론과 특정 컴파일러 구성 기술에서 없어서는 안될 도구입니다.

클로저로 동작하고 자유롭게 전달 될 수있는 익명 함수가있는 모든 언어에는 즉시 람다 미적분의 인코딩이 포함됩니다. 익명 함수는 LC 함수에서 항상 정확히 하나의 인수를 갖는 것을 제외하고는 람다 식에 해당합니다. 그러나 Turing-complete 언어는 LC와 동일하므로 LC는 항상 이러한 언어 위에 구현 될 수 있습니다. “-이 (주로 농담)”Greenspun의 10 번째 규칙 “에 상승을주는 규칙과 일치하는 시스템 또는 지나치게 지능형 구성 형식에 발생하는 경향이 모든 충분히 복잡한 C 나 포트란 프로그램이 임시, 비공식적으로 지정, 버그 쟁이 포함 Common Lisp의 절반을 느리게 구현합니다.


답변

람다 미적분은 미분 / 적분 미적분과 관련이 없습니다. 가장 일반적인 단어의 의미에서 미적분학은 계산 시스템을 의미합니다.

매우 높은 수준의 람다 미적분학에서는 튜링 머신이 계산 모델과 같은 방식으로 계산 모델입니다. 프로그래밍 언어 연구자들이 람다 미적분학을 연구하는 이유는 모델로서 논리 및 범주 이론과 같은 수학의 형식적 방법과 밀접한 관련이 있기 때문입니다. 따라서 이러한 영역의 방법을 사용하여 람다 미적분의 다양한 측면과 확장을 연구 할 수 있으며, 이는 특정 속성으로 더 나은 프로그래밍 언어를 디자인하는 데 도움이됩니다.

프로그래밍 언어에서 람다 미적분의 가장 직접적인 영향은 일반적으로 일급 함수 및 클로저의 형태로 나타납니다. C는 클로저를 지원하지 않으므로 Lisp, Python, Ruby, JavaScript 등과 같은 고급 언어로 개념을 탐색해야합니다. 역사적으로 Lisp는 프로그래밍 언어로 람다 미적분의 첫 번째 구체적인 구현으로 간주됩니다. .