람다 미적분학이 연구와 관련이있는 것은 무엇입니까?


10

나는 내년 가을 학사 컴퓨터 과학 과정을 시작하지만 기능 프로그래밍의 맥락에서 λ- 미적분학을 실제로 이해할 수는 없습니다. 나는 이것을 완전히 잘못 해석 할 수도 있지만 , 스탠포드 철학 백과 사전 의이 정의에 근거하면 , 이것은 함수에 대한 또 다른 표기 일뿐입니다.

이 경우 입니다 만, 왜 알고리즘의 실행 시간을 계산하는 일반 기능 표기법을 통해 미적분을 λ 사용하는 것이 유리이라고?


5
"함수에 대한 또 다른 표기법"이 아니라 "기능에 대한 첫 번째 표기법"입니다.
Andrej Bauer

@Kaveh 제안에 감사드립니다. 향후 게시물에 대해서는 명심하되 mhelvens의 답변은 우수하므로 크로스 포스트가 필요하지 않습니다.

공식적으로 정의 된 객체의 몸체입니다. 정확한 문제가 무엇인지 알 수 없습니다.
Raphael

나는 람다 미적분학에 대해 배울 때까지 용어를 이해하지 못했고 왜 그것들이 함수형 프로그래밍으로 이루어 졌는지 이해하지 못했습니다. 그것은 소프트웨어 구조를 훨씬 덜 임의적으로 보이게 만듭니다.
dansalmo

답변:


13

컴퓨터 과학에서 우리는 수학적으로 엄격한 소스 코드를 분석하고 이해하려고합니다. 이것이 확실한 확실성으로 흥미로운 속성 (예 : 종료)을 증명할 수있는 유일한 방법입니다. 이를 위해서는 모든 구문에 대해 잘 정의 된 언어가 필요합니다.

이론적으로 이것은 좋은 형식적 의미론을 가진 모든 언어 일 수있다 . 그러나 일이 덜 복잡하고 오류가 덜 발생하게하려면 가능한 한 단순하지만 어떤 프로그램도 표현할 수있는 언어를 사용하는 것이 가장 좋습니다 (예 : Turing complete ). 명령형 코드에 대한 추론을 위해 튜링 머신이 있습니다. 그러나 함수형 프로그래밍에 대한 추론에는 -calculus가 있습니다.λ

기본적인 -calculus는 함수형 프로그래밍 언어와 비슷하지만 많은 '수하물'이 나옵니다. 이것이 실제로 프로그램을 작성하기에 좋은 언어이거나 효율적인 언어라는 것은 중요하지 않습니다. 간단하고 표현 적입니다. 예를 들어, 재귀로 루프를 시뮬레이션 할 수 있으므로 루프가 필요하지 않습니다. Currying으로 시뮬레이션 할 수 있으므로 여러 매개 변수가있는 함수가 필요하지 않습니다 .λ

이제 어느 시점에서 기본 ( 유형화 되지 않은) -calculus의 일부가 아닌 구문에 대한 속성을 증명할 수 있습니다 . 그렇기 때문에 컴퓨터 과학자들은 수년에 걸쳐 다른 방향으로 확장 해 왔습니다. 예를 들어, 유형 시스템에 대해 추론하기 위해 많은 유형의 calculi 변형이 있습니다.λλλ


3
imo, 일부 컴퓨터 과학은 소스 코드를 이해하는 것이지만 물리학을 말하는 것은 수학적으로 엄격하게 로켓을 이해하는 것과 같습니다. 컴퓨터 과학은 계산에 관한 것입니다. 이와 관련된 불만은 언어의 효율성이 있다는 것입니다 않습니다 당신은 효율성이 아니라 잘 형성된 소스 코드를 공부하려면 문제. 그런 의미에서, TM을 명령형 언어 모델보다는 효율성에 대해 생각하는 방법으로 생각하는 것이 좋습니다 (두 가지 목적으로 단어 -RAM이 더 나은 선택 일 수 있습니다)
Sasho Nikolov

내가 위에 쓴 것은 당신의 대답이 마음에 들지 않는다는 것을 의미 하지는 않습니다 :)
Sasho Nikolov

동의했다. ;-) 고정.
mhelvens

1
튜링 기계가 필수적 코드에 대해 추론에서 극악한, 그것은 간단한 같은 장난감 언어를 사용하는 것이 훨씬 쉽다 동안 형 언어입니다. stackoverflow.com/questions/507310/the-while-language . 튜링 기계는 복잡한 이론에 대한 통찰력에 매우 유용합니다.
코디

1

이상하게도 많은 책들은 미적분학 에 대해 이야기 하지만 현대의 프로그래밍 언어 인 Lisp 또는 Scheme에 대해서는 언급하지 않고 학생들에게 불행하고도 오래되고 추상적이며 대부분 이론적이라는 생각을 남깁니다. Lisp 또는 Scheme을 공부하는 것은 미적분학을 이해하는 데 큰 도움이 될 수 있습니다 .λλλ

이 경우 입니다 만, 왜 알고리즘의 실행 시간을 계산하는 일반 기능 표기법을 통해 미적분을 λ 사용하는 것이 유리이라고?

Lisp 또는 함수형 프로그래밍을 사용하면 많은 이점이 있으며 알고리즘 런타임 계산은 한 가지 가능성 일뿐입니다 (반드시 참고를 인용하면 도움이 될 수 있습니다). 이미 기능적 표기법으로 인해 유도 또는 반복 관계를 통해 런타임 공식을 결정하면 원래 코드와 더 강력하거나 더 분명한 관계가있을 수 있습니다. 알고리즘의 다른 유형의 분석도 단순화됩니다.

또 다른 주요 장점은 구문 단순성입니다. 다른 언어의 파서는 매우 복잡하지만 Lisp 파서는 매우 간단합니다. 그래서 Lisp는 파싱 이론을 연구 할 수있는 훌륭한 언어입니다.

또 다른 주요 측면은 "컴퓨터 과학적"관점보다는 논리 또는 수학 렌즈 / 시점 에서 소프트웨어를 더 분석 하는 것입니다.

다른 답변에서 지적했듯이 Lisp는 반복이 아닌 재귀에 관한 것이며 재귀는 CS의 핵심입니다.

" -view"에 대한 자세한 설명과 세부 사항은 무료 온라인 및 반 유명 인사 인 [1]에서 찾을 수 있습니다.λ

[1] Abelson & Sussman의 컴퓨터 프로그램 구조 및 해석

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