람다 미적분을 아는 것이 얼마나 도움이됩니까?
람다 미적분학 을 아는 모든 사람들에게 : 프로그래밍과 관련하여 어떤 이점을 얻었 습니까? 사람들이 그것을 배우도록 권 하시겠습니까?
당신이 어떤 프로그램을 개발하고자하는 경우 함수형 프로그래밍 언어 , 그것은 중요합니다. Turing 기계에 대해 아는 것이 얼마나 유용합니까? C를 작성하면 언어 패러다임은 Turing 기계와 매우 유사합니다. 명령 포인터와 현재 명령이 있고 기계는 현재 상태에서 어떤 조치를 취한 다음 다음 명령으로 이동합니다.
기능적 언어에서는 그렇게 생각할 수 없습니다. 그것은 언어 패러다임이 아닙니다. 람다 미적분과 용어가 거기에서 어떻게 평가되는지 다시 생각해야합니다. 람다 미적분학을 모르면 함수형 언어에서 효과적이기는 훨씬 더 어려울 것입니다.
람다 미적분의 이점은 Turing 머신과 동일한 매우 간단한 계산 모델이라는 것입니다. 그러나 튜링 머신은 어셈블리 언어와 비슷하지만 람다 미적분은 고급 언어와 비슷합니다. 그리고 교회 인코딩 을 배우면 연속 전달 스타일 이라는 프로그래밍 기술을 배우는 데 도움이 될 것 입니다 . 이는 역 추적 검색 및 기타 깔끔한 트릭을 구현하는 데 매우 유용합니다.
실제로 람다 미적분의 주요 용도는 새로운 프로그래밍 언어 아이디어를 연구하기위한 훌륭한 실험실 도구 라는 것입니다 . 새로운 언어 기능에 대한 아이디어가 있다면, 당신은 할 수 람다 계산법에 새로운 기능을 추가 하고 당신은 무언가 얻을 프로그램으로 표현 충분히 하면서 매우 철저하게 연구에 대한 간단한 충분히 . 이 사용은 프로그래머보다 언어 디자이너와 이론가에게 더 많은 것입니다.
Lambda 미적분은 또한 그 자체로도 매우 멋집니다. 어셈블리 언어를 아는 것처럼 계산에 대한 이해를 심화시킵니다 . 람다 미적분에서 범용 튜링 머신 을 프로그래밍하는 것은 특히 재미 있습니다. 그러나 이것은 실용적인 프로그래밍이 아니라 기초 수학입니다.
솔직히 말해서, 함수형 프로그래밍 이전에 람다 미적분을 배운 덕분에이 둘은 명령형 프로그래밍과 C만큼 관련이 없다는 것을 깨달았습니다.
람다 계산법은 함수형 프로그래밍 언어, 밀교 하나, 튜링 소위 늪 (tarpit) 당신이 만약 같은; 우연히도 첫 번째입니다.
대부분의 함수형 프로그래밍 언어는 람다 미적분을 '학습'할 필요가 전혀 없습니다. 그 의미가 무엇이든간에 람다 미적분은 엄청나게 최소화되어 1 시간 이내에 그 공리를 '학습'할 수 있습니다. 고정 소수점 정리와 같이 그 결과를 알기 위해 Church-Rosser 정리 등은 함수형 프로그래밍과 관련이 없습니다.
또한 람다 추상화는 종종 '함수'로 간주됩니다. 동의하지 않습니다. 그것들은 함수가 아니라 알고리즘이며 사소한 차이입니다. 대부분의 '기능 언어'는 고전 수학이하는 방식으로 함수를 더 많이 취급합니다.
그러나 예를 들어 Haskell을 효과적으로 사용하려면 특정 유형 시스템 을 이해해야 합니다 . 즉, 람다 미적분에 관계없이 시스템 F 유형 시스템은 모든 '함수'에 적용 할 수 있으며 람다 추상화가 전혀 필요하지 않습니다. 일반적으로 수학에서는 f : R ^ 2-> R : f (x) = x ^ 2라고합니다. 우리는 이렇게 말할 수 있습니다 : f (x) = x ^ 2 :: R-> R-> R. 사실 Haskell은이 표기법에 매우 가깝습니다.
람다 미적분은 이론적 형식주의입니다. Haskell의 함수는 f보다 더 이상 '람다 추상화'가 아닙니다 .f (x) = x ^ 2 실제로 람다 추상화를 흥미롭게 만드는 것은 일반적으로 '상수'로 간주되는 것을 정의 할 수 있다는 것입니다. '함수'로서, 엄청난 계산 오버 헤드 때문에 기능적 언어는 그렇게하지 않습니다. Haskell 등 은 일상적인 고전 수학에서 사용되는 함수에 적용된 System F 유형 시스템 의 제한된 형태 일뿐 입니다. Haskell의 함수는 람다-미적분 에서처럼 익명의 공식적으로 상징적 인 축소 신청자가 아닙니다. 대부분의 함수형 프로그래밍 언어는 상징적 축소 기반 재 작성 시스템이 아닙니다. Lisps는 어느 정도는 있지만 그 자체로는 패러다임이며 '람다 키워드'는 실제로 그렇지 않습니다. '
실제로 프로그래밍과 관련하여 람다 미적분을 사용하는 것은 추상화의 본질 (또는 "익명 함수"또는 클로저)을 포착하는 최소한의 시스템이라는 것입니다. 그 외에는 추상화를 직접 구현해야 할 때를 제외하고는 일반적으로 필수적이라고 생각하지 않습니다 (Tetha ( 114646 ) 언급 됨).
나는 또한 그것이 함수형 프로그래밍에 필수적이라고 말하는 Denis Bueno ( 114701 ) 와 완전히 동의하지 않습니다 . 람다 미적분없이 기능적 언어를 정의, 사용 또는 이해하는 것은 완벽하게 가능합니다. 기능적 언어의 용어 평가를 이해하려면 (내 생각에는 기능적 언어의 사용과 다소 모순되는) 용어 재 작성 시스템에 대해 배우는 것이 좋습니다.
나는 람다 학습없이 함수형 프로그래밍을 배우는 이론적으로는 가능 말하는 것들에 동의 미적분을-만의 장점이 무엇 되지 람다 계산법 학습은? 많은 시간을 투자하는 것 같지는 않습니다.
아마도 함수형 프로그래밍을 더 잘 이해하는 데 도움이 될 것입니다. 그러나 그렇지 않더라도 여전히 배울 가치가있는 멋진 것입니다. Y-콤비는 아름다움의 일이다.
기술자가되고 작업을 수행하는 프로그램 만 작성하고 싶다면 람다 미적분, 유한 상태 기계, 푸시 다운 오토마타, 정규 표현식, 문맥없는 문법, 이산 수학 등을 알 필요가 없습니다.
그러나이 문제의 기초가되는 더 깊은 미스터리에 대한 호기심이 있다면 이러한 질문에 어떻게 답할 수 있는지 궁금해 할 수 있습니다. 개념은 아름답고 상상력을 확장합니다. 나는 또한 그들이 우연히 하나를 더 나은 실행자로 만든다고 생각합니다.
나를 매료시킨 것은 Minsky의 책 Computation : Finite and Infinite Machines였습니다.
람다 미적분은 튜링 머신과 같은 계산 모델입니다. 따라서이 모델을 기반으로 한 언어에 대한 특정 평가자를 구현해야하는 경우 유용하지만 실제로는 기본 아이디어 (어 : 함수의 본문에 의미 상 올바른 인수를 배치합니까?) 만 있으면됩니다. 그것.
람다 미적분을 배우는 한 가지 가능한 방법은
http://en.wikipedia.org/wiki/Lambda_Calculus
또는 더 많은 것을 원하신다면 여기 람다 미적분과 같은 것들에 관한 제 블로그가 있습니다.
http://weblogs.manas.com.ar/lziliani/
계산을 추상화 할 때마다 람다 미적분을 사용하면 부분 입력과 같은 대부분의 프로그래밍 언어에서 사용되는 항목을 모델링 할 수 있습니다. 이에 대한 자세한 내용은 이러한 의미에서 람다 미적분을 실제로 사용하는 최고의 책 중 하나입니다.
함수형 프로그래밍이 더 깊은 수준에서 작동하는 방식을 이해하는 데 Lambda 미적분이 유용하다는 것을 알았습니다. 특히 기능적 언어를 구현하는 방법.
유형 시스템 및 평가 전략 (예 : 이름으로 호출 대 값으로 호출)과 같은 고급 개념을 더 쉽게 이해할 수있게되었습니다.
기본적인 함수형 프로그래밍 기술을 사용하기 위해 Lambda 미적분에 대해 알 필요가 없다고 생각합니다. 그러나 람다 미적분을 이해하면 고급 프로그래밍 이론을 더 쉽게 배울 수 있습니다.
또한 NLP 영역에서 어떤 일을한다면 람다 미적분은 구성 의미론에서 방대한 작업의 기초가된다는 것을 언급하고 싶습니다.
저에게있어 이점은보다 간결한 시너지 프로그래밍입니다. 물건은 수직보다 수평으로 더 많이 흐르는 경향이 있습니다. 또한 간단한 알고리즘을 프로토 타이핑하는 데 매우 유용합니다. 내가 그것을 최대한 활용하고 있는지는 모르지만 매우 유용하다고 생각합니다.
참고 URL : https://stackoverflow.com/questions/114581/how-helpful-is-knowing-lambda-calculus
'Nice programing' 카테고리의 다른 글
포인터 값은 다르지만 동일하게 비교됩니다. (0) | 2020.10.28 |
---|---|
Ansible : 현재 대상 호스트의 IP 주소 가져 오기 (0) | 2020.10.28 |
디버거 란 무엇이며 문제를 진단하는 데 어떻게 도움이됩니까? (0) | 2020.10.27 |
MAX_PATH 문제가 Windows 10에 여전히 존재합니까? (0) | 2020.10.27 |
vue.js의 구성 요소에 데이터 전달 (0) | 2020.10.27 |