나는 내년 가을 학사 컴퓨터 과학 과정을 시작하지만 기능 프로그래밍의 맥락에서 λ- 미적분학을 실제로 이해할 수는 없습니다. 나는 이것을 완전히 잘못 해석 할 수도 있지만 , 스탠포드 철학 백과 사전 의이 정의에 근거하면 , 이것은 함수에 대한 또 다른 표기 일뿐입니다.
이 경우 입니다 만, 왜 알고리즘의 실행 시간을 계산하는 일반 기능 표기법을 통해 미적분을 λ 사용하는 것이 유리이라고?
나는 내년 가을 학사 컴퓨터 과학 과정을 시작하지만 기능 프로그래밍의 맥락에서 λ- 미적분학을 실제로 이해할 수는 없습니다. 나는 이것을 완전히 잘못 해석 할 수도 있지만 , 스탠포드 철학 백과 사전 의이 정의에 근거하면 , 이것은 함수에 대한 또 다른 표기 일뿐입니다.
이 경우 입니다 만, 왜 알고리즘의 실행 시간을 계산하는 일반 기능 표기법을 통해 미적분을 λ 사용하는 것이 유리이라고?
답변:
컴퓨터 과학에서 우리는 수학적으로 엄격한 소스 코드를 분석하고 이해하려고합니다. 이것이 확실한 확실성으로 흥미로운 속성 (예 : 종료)을 증명할 수있는 유일한 방법입니다. 이를 위해서는 모든 구문에 대해 잘 정의 된 언어가 필요합니다.
이론적으로 이것은 좋은 형식적 의미론을 가진 모든 언어 일 수있다 . 그러나 일이 덜 복잡하고 오류가 덜 발생하게하려면 가능한 한 단순하지만 어떤 프로그램도 표현할 수있는 언어를 사용하는 것이 가장 좋습니다 (예 : Turing complete ). 명령형 코드에 대한 추론을 위해 튜링 머신이 있습니다. 그러나 함수형 프로그래밍에 대한 추론에는 -calculus가 있습니다.
기본적인 -calculus는 함수형 프로그래밍 언어와 비슷하지만 많은 '수하물'이 나옵니다. 이것이 실제로 프로그램을 작성하기에 좋은 언어이거나 효율적인 언어라는 것은 중요하지 않습니다. 간단하고 표현 적입니다. 예를 들어, 재귀로 루프를 시뮬레이션 할 수 있으므로 루프가 필요하지 않습니다. Currying으로 시뮬레이션 할 수 있으므로 여러 매개 변수가있는 함수가 필요하지 않습니다 .
이제 어느 시점에서 기본 ( 유형화 되지 않은) -calculus의 일부가 아닌 구문에 대한 속성을 증명할 수 있습니다 . 그렇기 때문에 컴퓨터 과학자들은 수년에 걸쳐 다른 방향으로 확장 해 왔습니다. 예를 들어, 유형 시스템에 대해 추론하기 위해 많은 유형의 calculi 변형이 있습니다.λ
이상하게도 많은 책들은 미적분학 에 대해 이야기 하지만 현대의 프로그래밍 언어 인 Lisp 또는 Scheme에 대해서는 언급하지 않고 학생들에게 불행하고도 오래되고 추상적이며 대부분 이론적이라는 생각을 남깁니다. Lisp 또는 Scheme을 공부하는 것은 미적분학을 이해하는 데 큰 도움이 될 수 있습니다 .λ
이 경우 입니다 만, 왜 알고리즘의 실행 시간을 계산하는 일반 기능 표기법을 통해 미적분을 λ 사용하는 것이 유리이라고?
Lisp 또는 함수형 프로그래밍을 사용하면 많은 이점이 있으며 알고리즘 런타임 계산은 한 가지 가능성 일뿐입니다 (반드시 참고를 인용하면 도움이 될 수 있습니다). 이미 기능적 표기법으로 인해 유도 또는 반복 관계를 통해 런타임 공식을 결정하면 원래 코드와 더 강력하거나 더 분명한 관계가있을 수 있습니다. 알고리즘의 다른 유형의 분석도 단순화됩니다.
또 다른 주요 장점은 구문 단순성입니다. 다른 언어의 파서는 매우 복잡하지만 Lisp 파서는 매우 간단합니다. 그래서 Lisp는 파싱 이론을 연구 할 수있는 훌륭한 언어입니다.
또 다른 주요 측면은 "컴퓨터 과학적"관점보다는 논리 또는 수학 렌즈 / 시점 에서 소프트웨어를 더 분석 하는 것입니다.
다른 답변에서 지적했듯이 Lisp는 반복이 아닌 재귀에 관한 것이며 재귀는 CS의 핵심입니다.
" -view"에 대한 자세한 설명과 세부 사항은 무료 온라인 및 반 유명 인사 인 [1]에서 찾을 수 있습니다.