익명의 람다 함수 (함수 프로그래밍)


10

익명 (람다) 함수 란 무엇입니까? 함수형 프로그래밍 언어에서 익명 함수의 공식적인 정의는 무엇입니까?

간단한 용어로, scheme / lisp에서 프로그래밍 할 때 익명 (lambda) 함수는 식별자에 바인딩되지 않은 함수라고 말합니다.

람다 함수에 대해 공식적으로 말할 수있는 모든 것입니까? 이 간단한 정의에 더 많은 세부 사항이 추가 될 수 있다고 생각합니다. 정교하게 감사합니다!


답변:


10

내 의견으로는, 당신이 그들에 대해 실제로 말할 수있는 전부입니다.

아이디어는 고차 언어에서 함수는 또 다른 종류의 가치 일 뿐이라는 것입니다. C에서 식별자없이 (3 + 4)를 가질 수있는 것과 같은 방식으로 스키마에서 식별자없이 (lambda (x) + (3 x))를 가질 수 있습니다.

여기서 핵심은 익명 함수에 특별한 것이 없다는 것입니다. 함수를 다른 값과 다르게 취급해야하는 것은 다른 언어의 제한 사항입니다. 특수 정의는 기능 언어가 아닌 절차 언어에 대한 것입니다.


11

람다 미적분학에서 모든 함수 (용어)는 익명입니다. 이것은 람다 미적분의 필수 속성입니다. 복잡한 함수는 이름을 지정하지 않고 간단한 함수로 구성 할 수 있습니다.

프로그래밍 언어에서는 대부분의 경우 함수에 이름을 지정하는 것이 바람직합니다. 이것이 우리가 생각하는 방식이므로 사람이 코드를 읽을 수있게하기 때문입니다. 그러나 컴파일은 실행 파일을 생성 할 때 결국 이름을 제거합니다 (디버깅 정보를 무시하는 경우).

언어에서 익명 함수 (이름이없는 함수)를 표현할 수 있으면 프로그래머와 컴파일러 모두에게 유리할 수 있습니다. 프로그래머는 종종 더 짧은 코드를 작성할 수 있으며, 컴파일러는 익명 함수가 주어진 시간에 사용된다는 것을 알고 더 잘 최적화 할 수 있습니다 다른 곳이 아니라 장소.


1

질문의 어느 부분에 중점을 두느냐에 달려 있습니다. 익명 함수에 대해 익명 인 속성 인 경우 실제로 유일한 대답은 바인딩되지 않은 값이라는 것 입니다. 일반적으로 함수에 대해 이야기하는 경우 익명 함수는 아마도 함수형 환경에서 응용 언어에 대한 람다 미적분학 사용의 가장 눈에 띄는 징후 일 것입니다 .

실제로 람다 미적분학 관점에서 람다 식은 바인딩을 만드는 데 사용되는 매우 구문적인 구문입니다. 람다 미적분학에 사용 된 표기법을 상기하십시오.

λ에프.λ엑스.에프엑스

에프엑스에프엑스

언어는 일반적으로 let(ML과 같은 언어, 체계) 또는 define(구성표) 와 같은 방법으로 최상위 수준에서 사용 가능한 바인딩을 만들거나 구문이나 구문 내에서 모듈이나 객체와 같은 함수보다 복잡한 구문을 만들 수 있지만 바인딩은 낮은 수준의 람다입니다.

체계 또는 lisp 방언과 같은 언어를 보면, 그 자금은 람다 미적분학이며 많은 특수 형태는 실제로 설탕으로 코팅 된 람다입니다.

들어 concatenative 언어 , 이야기는 약간 다릅니다. 람다는 필요하지 않으며 실제로는 비생산적입니다. 모든 것이 함수 일 때 익명 람다를 정의하는 요점은 무엇입니까 ?

이 두 종류의 언어 간에는 이중성이 있습니다. 후자는 포인트 프리 함수 조합에 중점을 두어 모든 것을 함수로 표현하려고 시도하는 반면, 전자는 더 정교한 미적분학을 연구하고 다른 언어 값과 같이 일급 값으로 함수를 갖기 위해 노력합니다. 이러한 관점에서 람다는 그 노력의 결과로 볼 수 있습니다.

이 답변에서 소개 된 주제에 대한 몇 가지 포인터 :

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