Lambda là gì?


93

Ai đó có thể cung cấp một mô tả tốt về Lambda là gì không? Chúng tôi có một thẻ cho họ và họ đang có những bí mật của câu hỏi C #, nhưng tôi vẫn chưa tìm ra định nghĩa và lời giải thích tốt về những gì họ đang có ngay từ đầu.


1
Làm thế nào về bài viết giải tích lambda của Wikipedia để bắt đầu? Sau đó, bài viết lập trình chức năng của Wikipedia như một bài tiếp theo.
Thorsten79

2
có thể trùng lặp của lambda (chức năng) là gì?
nawfal

biểu thức amda được giải thích ở đây rất hay.
Jameer Mulani

Câu trả lời:


135

Đóng cửa, lambdas và chức năng ẩn danh không nhất thiết phải giống nhau.

Hàm ẩn danh là bất kỳ hàm nào không có (hoặc ít nhất là cần) tên riêng của nó.

Bao đóng là một hàm có thể truy cập các biến nằm trong phạm vi từ vựng của nó khi nó được khai báo, ngay cả sau khi chúng đã giảm nằm ngoài phạm vi. Các hàm ẩn danh không nhất thiết phải là các hàm đóng, nhưng chúng có trong hầu hết các ngôn ngữ và trở nên ít hữu ích hơn khi không có.

Lambda không được định nghĩa rõ ràng như khoa học máy tính. Rất nhiều ngôn ngữ thậm chí không sử dụng thuật ngữ này; thay vào đó họ sẽ chỉ gọi chúng là hàm đóng hoặc hàm anon hoặc phát minh ra thuật ngữ của riêng mình. Trong LISP, lambda chỉ là một hàm ẩn danh. Trong Python, lambda là một hàm ẩn danh được giới hạn cụ thể cho một biểu thức duy nhất; bất cứ điều gì khác, và bạn cần một chức năng được đặt tên. Lambdas đóng cửa trong cả hai ngôn ngữ.


thuật ngữ có thể được dùng để ám chỉ phép tính lambda en.wikipedia.org/wiki/Lambda_calculus
Steven A. Lowe

Chà, tôi với tôi đã có hơn một ủng hộ để đưa ra câu hỏi này. Tôi đã thấy rất nhiều câu trả lời kỹ thuật bị sa lầy trong thuật ngữ, nhưng câu trả lời này ngắn gọn và đưa ra quan điểm ngay lập tức.
Matthew Stopa

8
+1 vì không sử dụng thuật ngữ "đóng lại" để định nghĩa một đóng như thể nó làm cho nó rõ ràng hơn.
Daniel

5
Một vùng mà một số biến có thể tồn tại (tức là một phạm vi) được xác định bởi cấu trúc mã của bạn (tức là, về mặt từ vựng). Ví dụ, trong hầu hết các ngôn ngữ, một hàm xác định phạm vi từ vựng; bất kỳ biến nào được khai báo bên trong hàm đều không thể truy cập được bên ngoài nó.
Eevee

19

Còn được gọi là bao đóng hoặc hàm ẩn danh .. Tôi tìm thấy mô tả tốt nhất ở đây . Về cơ bản, khối mã nội tuyến có thể được chuyển làm đối số cho một hàm.



8

Nó chỉ là một hàm ẩn danh được khai báo nội tuyến, thường được gán cho một đại biểu khi bạn không muốn viết một hàm chính thức.

Trong các ngôn ngữ như lisp / Scheme, chúng thường được truyền khá tự do dưới dạng các tham số hàm, nhưng thành ngữ trong C # thường thấy lambdas chỉ được sử dụng để đánh giá lười biếng các hàm, như trong linq hoặc để tạo mã xử lý sự kiện ngắn hơn một chút.


5

Không thực sự có một thứ gọi là 'lambda' trong lập trình. Nó phụ thuộc vào ngôn ngữ, v.v.

Nói tóm lại, thông thường một ngôn ngữ 'có lambdas' sử dụng thuật ngữ cho các hàm ẩn danh hoặc trong một số trường hợp, các hàm đóng. Như vậy, trong Ruby:

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

4

Theo các câu trả lời trước:
-Điều quan trọng về các hàm ẩn danh không phải là chúng không yêu cầu tên.
- Đóng cửa là một khái niệm riêng biệt.
-Một bài báo wikipedia khổng lồ không làm cho điều này rõ ràng hơn.

Đây là câu trả lời của tôi trong 3 phần:
1. Lambda là một hàm cũng là một biểu thức. Đây là điều quan trọng.
2. Nhiều ngôn ngữ thực hiện cái gọi là "lambdas" thêm một số cú pháp để làm cho việc viết các hàm ngắn này dễ dàng hơn và nhanh hơn, nhưng điều này là không bắt buộc.
3. Một số ngôn ngữ có thể yêu cầu lambda không có tác dụng phụ . Đó sẽ là một lambda thuần túy hơn theo nghĩa chức năng.

Khi một hàm là một biểu thức, nó là một "công dân hạng nhất" trong ngôn ngữ. Tôi có thể làm tất cả những điều quan trọng với nó:

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

Được cắt từ wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

Trong các ngôn ngữ lập trình như Lisp và Python, lambda là một toán tử được sử dụng để biểu thị các hàm ẩn danh hoặc các bao đóng, sau cách sử dụng phép tính lambda.


Tôi đoán bạn muốn nói đến dòng này: Trong các ngôn ngữ lập trình như Lisp và Python, lambda là một toán tử được sử dụng để biểu thị các hàm ẩn danh hoặc các bao đóng, sau cách sử dụng tính toán lambda. Tôi đã xem qua bài báo nhưng lại bỏ sót.
Fred 29-08
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.