Lambda 란 무엇입니까?


93

누군가 Lambda가 무엇인지에 대한 좋은 설명을 제공 할 수 있습니까? 우리는 그들에 대한 태그를 가지고 있으며 그들은 C # 질문의 비밀에 있지만 처음에 그들이 무엇인지에 대한 좋은 정의와 설명을 아직 찾지 못했습니다.


1
방법에 대한 위키 백과의 람다 계산법 기사 시작 하시나요? 그런 다음 Wikipedia의 함수형 프로그래밍 기사 를 후속 조치로 제공합니다.
Thorsten79

2
의 중복 가능성 무슨 람다 (기능)인가?
nawfal

amda 표현은 여기에서 아름답게 설명 되었습니다 .
Jameer Mulani 17.04.04

답변:


135

클로저, 람다 및 익명 함수가 반드시 동일한 것은 아닙니다.

익명 함수는 자체 이름이 없거나 최소한 필요한 함수입니다.

클로저가 떨어진 후에도,이 선언되었을 때의 어휘 범위에 있었다 변수에 액세스 할 수있는 기능입니다 밖으로 . 익명 함수는 반드시 클로저 일 필요는 없지만 대부분의 언어로되어 있으며 그렇지 않은 경우 유용하지 않게됩니다.

람다는 컴퓨터 과학이하는 한 그렇게 잘 정의되어 있지 않습니다. 많은 언어에서이 용어를 사용하지 않습니다. 대신 그들은 단지 그것들을 클로저 또는 anon 함수라고 부르거나 그들 만의 용어를 발명 할 것입니다. LISP에서 람다는 익명의 함수입니다. Python에서 람다는 단일 표현식으로 특별히 제한되는 익명 함수입니다. 더 이상 이름이 지정된 함수가 필요합니다. Lambda는 두 언어로 된 클로저입니다.


이 용어는 람다 미적분을 의미 할 수 있습니다. en.wikipedia.org/wiki/Lambda_calculus
Steven A. Lowe

와우 나는이 질문을하기 위해 하나 이상의 찬성 투표를했습니다. 나는 용어가 수렁에 빠진 ​​많은 기술적 답변을 보았지만 이것은 간결하고 즉시 요점을 제시합니다.
Matthew Stopa

8
"닫기"라는 용어를 사용하지 않고 폐쇄를 더 명확하게 정의하는 +1.
다니엘

5
코드 구조 (예 : 어휘)에 의해 정의 된 일부 변수가 존재할 수있는 영역 (예 : 범위)입니다. 예를 들어, 대부분의 언어에서 함수는 어휘 범위를 정의합니다. 함수 내부에서 선언 된 변수는 외부에서 액세스 할 수 없습니다.
Eevee



8

인라인으로 선언 된 익명 함수일 뿐이며, 가장 일반적으로 완전한 기능을 작성하고 싶지 않을 때 대리자에 할당됩니다.

lisp / scheme과 같은 언어에서는 종종 함수 매개 변수로 매우 자유롭게 전달되지만 C #의 관용구는 일반적으로 linq에서와 같이 함수의 지연 평가 또는 이벤트 처리 코드를 약간 간결하게 만드는 데만 사용되는 람다를 찾습니다.


5

프로그래밍에서 '람다'와 같은 것은 실제로 없습니다. 언어 등에 따라 다릅니다.

간단히 말해, 일반적으로 '람다가있는'언어는 익명 함수 또는 경우에 따라 폐쇄라는 용어를 사용합니다. 마찬가지로 Ruby에서 :

f = lambda { return "this is a function with no name" }
puts f.call

4

이전 답변에 대한 응답 :
-익명 함수에 대한 중요한 점은 이름이 필요하지 않다는 것이 아닙니다.
-폐쇄는 별도의 개념입니다.
-거대한 위키피디아 기사는 이것을 더 명확하게하지 않습니다.

다음은 세 부분으로 된 내 대답입니다.
1. 람다는 표현식이기도 한 함수입니다. 이것은 중요한 것입니다.
2. 소위 "람다 (lambda)"를 구현하는 많은 언어는 이러한 짧은 함수를 더 쉽고 빠르게 작성하기 위해 약간의 구문 설탕 을 추가 하지만 필수는 아닙니다.
3. 일부 언어에서는 람다 에 부작용없어야 할 수 있습니다 . 그것은 기능적 의미에서 더 순수한 람다가 될 것입니다.

함수가 표현식이면 언어 내에서 "일류 시민"입니다. 나는 그것으로 모든 중요한 일을 할 수 있습니다.

x = lambda(){ return "Hello World"; }

doit( 1, 2, lambda(a,b){ return a > b; }, 3 )

x = (lambda(a){ return a+1; }) + 5  // type error, not syntax error

(lambda(a,b){ print(a); log(b); })( 1, 2 )  // () is valid operator here

1

wikipedia에서 잘림 : http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

Lisp 및 Python과 같은 프로그래밍 언어에서 lambda는 람다 계산법 사용에 따라 익명 함수 또는 클로저를 나타내는 데 사용되는 연산자입니다.


이 줄을 의미 한 것 같습니다. Lisp 및 Python과 같은 프로그래밍 언어에서 lambda는 람다 계산법 사용에 따라 익명 함수 또는 클로저를 나타내는 데 사용되는 연산자입니다. 이미 기사를 스캔했지만 놓쳤습니다.
프레드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.