Lambda tính toán ngoài lập trình chức năng?


21

Tôi là một sinh viên đại học và chúng tôi hiện đang học Lambda Compus. Tuy nhiên, tôi vẫn có một thời gian khó hiểu chính xác tại sao điều này hữu ích cho tôi. Tôi nhận ra rằng nếu bạn thực hiện vô số chương trình chức năng thì nó có thể hữu ích, tuy nhiên tôi cho rằng nó không thực sự cần thiết cho việc học lập trình chức năng, bạn nghĩ sao?

Thứ hai, có bất kỳ việc sử dụng nào cho Lambda Tính trong lĩnh vực Khoa học Máy tính nhưng ngoài các ngôn ngữ lập trình chức năng không?

Câu trả lời:


15

Tính toán lambda là cơ bản trong logic, lý thuyết thể loại, lý thuyết loại, xác minh chính thức, ... Về cơ bản, bất cứ điều gì để làm với ngữ nghĩa ngôn ngữ lập trình và logic hình thức. Đó là một chủ nghĩa hình thức cơ bản mà những người làm việc trong các lĩnh vực này thậm chí không đặt câu hỏi về lợi ích của nó.

Tôi nghĩ rằng nó cực kỳ hữu ích để hiểu lập trình chức năng bởi vì nó cung cấp cho bạn bản chất của lập trình chức năng. Chức năng, ứng dụng, thay thế. Dựa trên điều này, bạn có thể xây dựng các kỹ năng của mình trong việc suy luận về các chương trình chức năng và các biến đổi của chúng. Chức năng bậc cao là một làn gió.

Chắc chắn bạn có thể học lập trình chức năng mà không cần tính toán lambda, nhưng bạn sẽ không bao giờ thực sự hiểu lập trình chức năng nếu không có nó.


Cảm ơn bạn rất nhiều vì đã trả lời Dave. Tôi nghĩ rằng xác minh chính thức là lý do tốt nhất, vì lý do tại sao tính toán lambda hữu ích cho tôi để học, và thật vui, tôi sẽ làm một khóa học về xác minh chính thức vào học kỳ tới. Bạn cũng sẽ sử dụng phép tính lambda để xác minh chính thức một phần mềm được viết bằng bất kỳ ngôn ngữ nào, ví dụ như một mệnh lệnh bắt buộc hoặc hướng đối tượng?
Jacob

1
Bạn không thể sử dụng phép tính lambda trực tiếp khi thực hiện xác minh chính thức, nhưng nó sẽ xuất hiện trong các nền tảng của xác minh chính thức. Viết thông số kỹ thuật thường liên quan đến việc viết bằng ngôn ngữ chức năng, ngay cả đối với mã bắt buộc / OO.
Dave Clarke

Được rồi, thật thú vị nhờ một bó, bây giờ tôi có thêm một chút lý do để nghiên cứu điều này. Bạn có biết tính toán lambda được sử dụng để thiết kế bất kỳ ngôn ngữ phi chức năng nào (ở cấp độ thấp hơn) không?
Jacob

1
CÔ GÁI. Scala. Cuối cùng, câu hỏi của bạn rất khó trả lời. Phép tính lambda đã trở thành một phần kiến ​​thức phổ biến cho (hầu hết) các nhà thiết kế ngôn ngữ và do đó nó ảnh hưởng đến thiết kế ngôn ngữ, ngay cả khi nó không được sử dụng rõ ràng. Hãy xem xét các khối trong Smalltalk hoặc Ruby, các lớp ẩn danh trong Java. Đây là các bao đóng, được liên kết chặt chẽ với các hàm bậc cao hơn trong phép tính lambda.
Dave Clarke

Được rồi, cảm ơn rất nhiều Dave, điều đó được đánh giá cao.
Jacob

17

Bạn đang yêu cầu một ứng dụng ngoài khoa học máy tính và logic. Điều đó có thể dễ dàng tìm thấy, ví dụ như trong cấu trúc liên kết đại số, thật thuận tiện khi có một không gian đóng cartesian, xem danh mục thuận tiện của các không gian tôpô trên nLab. Ngôn ngữ chính thức tương ứng với loại đóng Descartes chính là -calculus. Hãy để tôi minh họa bằng một ví dụ rất đơn giản làm thế nào điều này có ích.λ

Đầu tiên, như một bài tập khởi động, giả sử ai đó hỏi bạn rằng hàm được xác định bởi f ( x ) = x 2 e x + log ( 1 + x 2 ) có khác nhau không. Bạn không thực sự phải chứng minh rằng nó là, bạn chỉ cần quan sát rằng nó là một thành phần của các chức năng khác nhau, do đó khác biệt. Nói cách khác, bạn đã đưa ra một kết luận dễ dàng dựa trên hình thức định nghĩa.f:RRf(x)=x2ex+log(1+x2)

Bây giờ cho ví dụ thực tế. Giả sử ai đó hỏi bạn xem chức năng xác định bởi f ( x ) = ( λ f : C ( R ) . x - x f ( 1 + t 2 ) d t ) ( λ y : R . Max ( x , tội lỗi ( y + 3 ) )f:RR

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
là liên tục. Một lần nữa, chúng tôi ngay lập tức có thể trả lời "yes" vì chức năng được xác định bằng cách sử dụng -calculus và bắt đầu từ bản đồ liên tục tối đa , , tội lỗi , vvλmaxsin

Phần mở rộng khác nhau của -calculus làm cho nó có thể làm cùng một loại điều trong các lĩnh vực khác. Ví dụ, bởi vì một topo mịn là một phạm trù đóng Descartes, bất kỳ bản đồ được định nghĩa bằng cách sử dụng λ -calculus, bắt đầu từ phái sinh và các cấu trúc vòng của số thực (và bạn có thể ném vào hàm mũ nếu bạn muốn) sẽ tự động được mịn . (Trên thực tế, lực đẩy chính của các topos trơn tru là sự tồn tại của infinitesimals nilpotent cho phép bạn nói một cách có ý nghĩa những câu như "chúng ta ghép một đĩa thành các hình tam giác mỏng vô hạn".)λλ


1
Cảm ơn bạn đã trả lời công phu. Trên thực tế, tôi đã cố gắng tìm cách sử dụng tính toán lambda trong khoa học máy tính nhưng ngoài lập trình chức năng, xin lỗi nếu điều này không rõ ràng. Tôi đã thay đổi câu hỏi để nói rõ hơn điều này.
Jacob

Ah, quá tệ, tôi đã có thể viết một phản hồi công phu về điều đó.
Andrej Bauer

Xin lỗi về điều đó. Vui lòng thêm bất kỳ nhận xét nào nếu bạn muốn thêm bất kỳ thông tin bổ sung nào :)
Jacob

2
λ



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.