2008-09-29 89 views
89

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

+0

Làm thế nào về [bài viết tính toán lambda của Wikipedia] (http://en.wikipedia.org/wiki/Lambda_calculus) để bắt đầu? Sau đó, [bài viết lập trình chức năng của Wikipedia] (http://en.wikipedia.org/wiki/Functional_programming_language) là một phần tiếp theo. – Thorsten79

+1

có thể trùng lặp của [Hàm lambda (hàm) là gì?] (Http://stackoverflow.com/questions/16501/what-is-a-lambda-function) – nawfal

+0

biểu thức amda được giải thích [ở đây] (https: // chaseyourjava .blogspot.in/2017/11/lamda-expression-in-java-8.html) đẹp mắt. –

Trả lời

123

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

Chức năng ẩn danh là bất kỳ chức năng nào không có (hoặc ít nhất, cần) tên riêng của nó.

Việc đó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 được khai báo, ngay cả sau khi chúng đã giảm ra khỏi phạm vi. Các hàm ẩn danh không nhất thiết phải là các bao đóng, nhưng chúng ở hầu hết các ngôn ngữ và trở nên ít hữu ích hơn khi chúng không có.

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

+0

thuật ngữ có thể được dùng để ngụ ý tính toán lambda http://en.wikipedia.org/wiki/Lambda_calculus –

+0

Wow Tôi với tôi đã có nhiều hơn một upvote để đưa ra câu hỏi này. Tôi đã nhìn 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 là ngắn gọn và làm cho điểm ngay lập tức. –

+8

+1 vì không sử dụng cụm từ "đóng cửa" để xác định một đóng cửa như thể nó làm cho nó rõ ràng hơn. – Daniel

1

cắt bớ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 nhà điều hành sử dụng để biểu thị các chức năng ẩn danh hoặc đóng cửa, sau sử dụng phép tính lambda.

+0

Tôi đoán bạn có nghĩa là 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, theo cách sử dụng tính toán lambda. Tôi đã quét bài viết nhưng bỏ qua điều đó. – Fred

8

Nó chỉ là một hàm ẩn danh được khai báo nội dòng, thường được chỉ định 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 chuyển tự do như tham số hàm, nhưng thành ngữ trong C# thường tìm thấy lambdas chỉ dùng để đánh giá các hàm, như linq, hoặc để tạo mã xử lý sự kiện một chút terser.

17

"Lambda" dùng để chỉ Lambda Calculus hoặc biểu thức lambda cụ thể. Lambda tính toán về cơ bản là một chi nhánh của logic và toán học mà đề với các chức năng, và là cơ sở của functional programming languages.

~ William Riley-Land

19

Còn được gọi là đóng cửa hoặc các chức năng ẩn danh .. tôi thấy mô tả tốt nhất here. Về cơ bản, khối nội tuyến của mã có thể được chuyển như một đối số cho một hàm.

4

Không thực sự là một điều như 'một lambda' trong lập trình. Tùy thuộc vào ngôn ngữ, v.v.

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

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

Để trả lời các câu trả lời trước:
-Điều quan trọng về các chức năng ẩn danh không phải là chúng không yêu cầu tên.
-Lưu ý là một khái niệm riêng biệt.
-Một bài viết 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.Một 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 đường cú pháp để viết những hàm ngắn này dễ dàng hơn và nhanh hơn, nhưng điều này không bắt buộc.
3. Một số ngôn ngữ có thể yêu cầu lambda có không có tác dụng phụ. Đó sẽ là một lambda tinh khiết hơn theo nghĩa chức năng.

Khi hàm là một biểu thức, đó là "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 
Các vấn đề liên quan