함수형 프로그래밍 외부의 람다 미적분?


21

저는 대학생이며 현재 Lambda Calculus를 공부하고 있습니다. 그러나 여전히 이것이 왜 유용한 지 이해하는 데 어려움을 겪고 있습니다. 함수형 프로그래밍을 많이하면 유용 할 수도 있지만, 실제로는 함수형 프로그래밍 학습에 필요하지 않다고 생각합니다. 어떻게 생각하십니까?

둘째, 컴퓨터 과학 영역 내에서 기능적 프로그래밍 언어 외부에서 Lambda Calculus를 사용할 수 있습니까?

답변:


15

람다 미적분학은 논리, 범주 이론, 유형 이론, 형식 검증 등에서 기본적으로 사용됩니다. 이 분야에서 일하는 사람들이 그것의 이점에 의문을 제기하지 않는 것은 근본적인 형식주의입니다.

함수형 프로그래밍의 본질을 제공하기 때문에 함수형 프로그래밍을 이해하는 데 매우 유용하다고 생각합니다. 기능, 응용, 대체. 이를 바탕으로 기능적 프로그램과 그 변형에 대해 추론하는 기술을 쌓을 수 있습니다. 고차 함수는 산들 바람입니다.

물론 람다 미적분없이 함수형 프로그래밍을 배울 수는 있지만 함수형 프로그래밍 없이는 함수형 프로그래밍을 진정으로 이해하지 못할 것입니다.


답변 Dave에게 대단히 감사합니다. 나는 람다 미적분학이 왜 내가 배우기에 유용하고 재미있게도 다음 학기에 공식 검증에 대한 코스를 할 것이라고 공식적인 검증이 가장 좋은 이유라고 생각합니다. 람다 미적분학을 사용하여 명령형 또는 객체 지향 소프트웨어와 같은 모든 언어로 작성된 소프트웨어를 공식적으로 확인 하시겠습니까?
Jacob

1
공식 검증을 수행 할 때 람다 미적분학을 직접 사용할 수는 없지만 공식 검증의 기초에 나타납니다. 사양 작성에는 명령형 / OO 코드의 경우에도 기능 언어로 작성하는 것이 포함됩니다.
Dave Clarke

알았어요. 정말 고마워요. 이제 공부해야 할 이유가 조금 더 있습니다. 람다 미적분학이 기능이없는 언어를 설계하는 데 사용되는지 아는가?
Jacob

1
알골. 스칼라. 궁극적으로 귀하의 질문에 대답하기가 어렵습니다. 람다 미적분은 (대부분의) 언어 설계자들에게 공통된 지식의 일부가되었으므로 명시 적으로 사용되지 않더라도 언어 설계에 영향을 미칩니다. Java의 익명 클래스 인 Smalltalk 또는 Ruby의 블록을 고려하십시오. 이것들은 람다 미적분학에서 고차 함수와 밀접하게 연결된 클로저입니다.
Dave Clarke

알았어. 데이브 고마워. 고마워.
Jacob

17

컴퓨터 과학 및 논리 이외의 응용 프로그램을 요청하고 있습니다. 예를 들어 대수 토폴로지에서 쉽게 찾을 수 있습니다. 직교 폐쇄 영역의 범주를 갖는 것이 편리합니다 . nLab 의 편리한 토폴로지 영역 범주를 참조하십시오 . 직교 폐쇄 범주에 해당하는 공식 언어는 정확히 -calculus입니다. 이것이 어떻게 유용한 지 아주 간단한 예를 들어 설명하겠습니다.λ

먼저 워밍업 연습으로 누군가 의해 정의 된 함수 인지 묻습니다 는 차별화됩니다. 당신은 실제로 그것이 그것을 증명할 필요는 없으며, 그것은 그것이 차별화 가능한 기능, 따라서 차별화 가능한 구성이라는 것을 관찰하면됩니다. 다시 말해, 정의 의 형식 에 따라 쉬운 결론을 내 렸습니다 . F ( X ) = X (2) E (X) + 로그 ( 1 + X 2 )f:RRf(x)=x2ex+log(1+x2)

이제 실제 예를 들어 보겠습니다. 누군가 의해 정의 된 함수 인지 묻습니다 는 연속적입니다. 함수는 -calculus를 사용하여 연속 맵 , , 등에서 시작 하므로 "yes"로 즉시 응답 할 수 있습니다 .f:RR

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
λmaxsin

-calculus 의 다양한 확장을 통해 다른 영역에서 동일한 종류의 작업을 수행 할 수 있습니다. 예를 들어, 부드러운 지형지 물 은 직교 닫힌 범주이므로 -calculus를 사용하여 정의 된 파생물과 실수의 링 구조 (원하는 경우 지수 함수를 던질 수 있음)를 사용하여 정의 된 모든 맵 이 자동으로 생성됩니다. 부드러운. (실제로, 부드러운 토포의 주요 추력은 "무한대 이등변 삼각형으로 디스크를 나눕니다"와 같은 것을 의미있게 말할 수있는 전능 한 무한대의 존재입니다.λλ


1
정교하게 답변 해 주셔서 감사합니다. 실제로 나는 컴퓨터 과학 내에서 그러나 기능적 프로그래밍 밖에서 람다 미적분학의 사용을 찾으려고 노력했다. 더 명확하게 설명하기 위해 질문을 변경했습니다.
Jacob

아, 너무 나쁘다, 나는 그것에 대해 정교한 답변을 썼을 것이다.
Andrej Bauer

그것에 대해 사과드립니다. 추가 정보를 추가하고 싶으면 언제든지 의견을 추가하십시오 :)
Jacob

2
나는 Dave의 질문이 괜찮다고 생각하지만 추가 할 것이 없습니다. -calculus로 할 수있는 흥미로운 일을보고 싶다면 불가능한 기능을 살펴볼 수 있습니다. 그러나 일반적인 대답으로 Dave 's는 매우 좋습니다. λ
Andrej Bauer

7

-calculus 를 보는 한 가지 방법은 간단하고 간결한 매개 변수 지정 프로그램 모델입니다. 함수, 프로 시저 또는 메소드가있는 거의 모든 프로그래밍 언어와 모듈이 있거나 유형을 매개 변수화 할 수있는 모든 언어로 코드를 매개 변수화합니다. 매개 변수화는 재사용의 한 형태입니다. -calculus는 매우 간단 하기 때문에 코드를 매개 변수화 할 수있는 많은 프로그래밍 언어 간의 공통점이 특히 명확하게 드러납니다.λλ

-calculus 에 대해 몰라도 매우 훌륭한 프로그래머가 될 수는 있지만 매우 유용한 아름다운 것을 놓치고 있습니다.λ


5

Microsoft LINQ (Language INtegrated Query)는 기능적 프로그래밍 기능을 절차 적 언어로 접목합니다. -calculus를 광범위하고 직접 사용하여 종속성을 풀고 데이터베이스 서버에 위임 할 수있는 표현식 트리의 부분을 분리합니다. 이것은 상업적 가치가 높은 매우 실용적인 응용 프로그램입니다.λ

나는 기능적 언어를 사용하여 작은 상업 응용 프로그램을 작성했으며 학자와 연구원에게 가치가 있지만 절차 적 사촌보다 상업적으로 덜 유용하다는 것을 확신 할 수 있습니다. 실제로 그것은 코스를위한 말의 문제이며, 무엇보다도 가장 필요한 것은 절차 적이거나 기능적 일 수있는 언어입니다. 결과적으로 -expressions 와 같이 LINQ를 지원하기 위해 C #에 도입 된 기능적 기능 은 데이터베이스 쿼리 컨텍스트 외부에서 상당히 많이 사용됩니다.λ

λ


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.