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


13

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

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


2
이 질문은 cs.stackexchange.com 에서 더 잘 답변 될 것 입니다.
davidk01

@ChrisF. 이 질문은 컴퓨터 과학 사이트 중 하나에 더 적합 할 수 있습니다. 그렇지 않다면 나는 그것을 좁히려 고 노력했으며 현재 형태로 다시 열 수 있는지 궁금합니다.
Tom Au

Mathematica는 아무도 언급하지 않은 것으로 알려진 람다 미적분학을 가지고 있습니다.
William

답변:


26

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의 절반을 느리게 구현합니다. "


이것은 내가 전에 선택한 것보다 더 나은 대답입니다. 당신의 대답은 정말로 집으로칩니다. 이것이 바로 내가 찾던 것입니다!
RonaldMunodawafa

"... LC 함수에서 항상 정확히 하나의 인수를 갖는 것을 제외하고":이 기능은 카레 라고 하는가 아니면 적어도 관련이 있습니까?
Giorgio

@Giorgio Currying은 다르지만 관련이 있습니다. LC에는 다중 인수 함수가 없지만 각각 하나의 인수를 갖는 중첩 함수로 간단히 인코딩 할 수 있습니다. ML 표기법을 사용하는 예 : x = fn (a, b, c) => a + b + c(type int * int * int -> int, invocation fn (1, 2, 3))은 x = fn a => fn b => fn c => a + b + c(type int -> int -> int -> int, invocation ((x 1) 2) 3– ML에서 선택적인 parens )로 변환 될 수 있습니다 . 대신에 세 가지 인수를 공급하는 지금, 우리는 또한 두를 제공 할 수 있습니다 : plus3 = x 1 2유형을 가지고있는 int -> int. 이것은 부분 적용 / 커링입니다.
amon

나는 커리가 모든 기능이 하나의 논쟁만을 취한다는 것을 의미한다고 생각했다 (LC에서와 같이).
Giorgio

8

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

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

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


1
Lisp와 같은 람다 미적분에 매우 가까운 특정 언어를 언급하고 싶을 수도 있습니다.
Giorgio

1
나는 여전히 SICP를 사용하여 Scheme을 배우고 있으며이 분야에 대해 더 많이 배우기를 바랍니다. 정교한 답변과 제안에 감사드립니다.
RonaldMunodawafa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.