Điều gì làm cho lambda tính toán có liên quan để nghiên cứu?


10

Tôi sẽ bắt đầu một khóa học khoa học máy tính vào mùa thu tới, nhưng tôi thực sự không thể hiểu được tính toán trong bối cảnh lập trình chức năng. Tôi có thể hiểu sai điều này hoàn toàn, nhưng dựa trên định nghĩa này từ Bách khoa toàn thư Stanford, đó chỉ là một ký hiệu khác cho các chức năng.

Nếu nó chỉ vậy, tại sao nó lại thuận lợi để sử dụng λ-calculus qua ký hiệu chức năng thường xuyên để tính toán thời gian chạy thuật toán?


5
Đó không phải là "chỉ một ký hiệu khác cho các chức năng" mà là "ký hiệu đầu tiên cho các chức năng".
Andrej Bauer

Cảm ơn lời đề nghị, @Kaveh. Tôi sẽ ghi nhớ nó cho các bài viết trong tương lai, tuy nhiên câu trả lời của mrcvens là tuyệt vời, vì vậy không cần phải có một cây thánh giá.

Đó là một cơ thể được xác định chính thức của các đối tượng. Tôi không thấy vấn đề chính xác của bạn là gì.
Raphael

Tôi đã không thực sự hiểu thuật ngữ hoặc lý do tại sao mọi thứ đã được thực hiện trong chương trình chức năng cho đến khi tôi biết về phép tính lambda. Nó làm cho các cấu trúc phần mềm dường như ít độc đoán hơn.
dansalmo

Câu trả lời:


13

Trong khoa học máy tính, chúng tôi muốn phân tích và hiểu mã nguồn với sự chặt chẽ về toán học. Đó là cách duy nhất để chứng minh các thuộc tính thú vị (như chấm dứt) với sự chắc chắn tuyệt đối. Cho rằng chúng ta cần một ngôn ngữ có ý nghĩa rất rõ ràng cho mọi cấu trúc.

Về lý thuyết, đây có thể là bất kỳ ngôn ngữ nào có ngữ nghĩa chính thức tốt . Nhưng để làm cho mọi thứ bớt phức tạp hơn và ít bị lỗi hơn, tốt nhất bạn nên sử dụng một ngôn ngữ đơn giản nhất có thể nhưng vẫn có thể diễn đạt bất kỳ chương trình nào (tức là hoàn thành Turing ). Đối với lý do về mã bắt buộc, có máy Turing . Nhưng để suy luận về lập trình chức năng, có -calculus.λ

-calculus cơ bản giống như một ngôn ngữ lập trình chức năng, nhưng với rất nhiều 'hành lý' được lấy ra. Điều quan trọng là đây không phải là một ngôn ngữ hay để thực sự viết chương trình, cũng không phải là một ngôn ngữ hiệu quả. Chỉ là nó đơn giản và biểu cảm. Ví dụ: chúng ta không cần các vòng lặp, bởi vì chúng ta có thể mô phỏng chúng bằng đệ quy. Và chúng ta không cần các hàm có nhiều tham số, vì chúng ta có thể mô phỏng chúng với Currying .λ

Bây giờ, tại một số điểm, bạn có thể muốn chứng minh các thuộc tính về các cấu trúc không phải là một phần của cơ bản (chưa được đánh dấu) -calculus. Đó là lý do tại sao các nhà khoa học máy tính đã mở rộng nó theo các hướng khác nhau trong nhiều năm. Ví dụ, để lý giải về các hệ thống kiểu, có rất nhiều biến thể của kiểu gõ -calculi .λλ


3
imo, một số khoa học máy tính có thể là về việc hiểu mã nguồn, nhưng nói rằng điều đó đúng trong các âm thanh nói chung giống như nói về vật lý là về việc hiểu các tên lửa với sự chặt chẽ toán học. khoa học máy tính là về tính toán. Một khiếu nại liên quan là hiệu quả của ngôn ngữ không thành vấn đề nếu bạn muốn nghiên cứu hiệu quả và mã nguồn không được hình thành tốt. Theo nghĩa đó, có lẽ tốt hơn nên nghĩ về TM như một cách nghĩ về hiệu quả hơn là một mô hình ngôn ngữ bắt buộc (và cho cả hai mục đích, RAM từ có thể là lựa chọn tốt hơn)
Sasho Nikolov

btw những gì tôi viết ở trên không có nghĩa là tôi không thích câu trả lời của bạn :)
Sasho Nikolov

Đã đồng ý. ;-) Đã sửa.
mrcvens

1
Các máy Turing rất hung dữ khi suy luận về mã bắt buộc, việc sử dụng ngôn ngữ đồ chơi như ngôn ngữ đơn giản trong khi gõ sẽ dễ dàng hơn nhiều . stackoverflow.com/questions/507310/the-fter-lingu . Máy Turing vẫn rất hữu ích cho những hiểu biết sâu sắc trong lý thuyết phức tạp.
cody

1

kỳ lạ là rất nhiều cuốn sách nói về tính toán mà không đề cập đến Lisp hay Scheme , các ngôn ngữ lập trình hiện đại dựa trên nó, khiến sinh viên không may nghĩ rằng nó cũ và trừu tượng và chủ yếu là lý thuyết. nghiên cứu Lisp hoặc Scheme có thể là một góc tuyệt vời để giúp vô cùng hiểu được tính toán .λλ

Nếu nó chỉ vậy, tại sao nó lại thuận lợi để sử dụng λ-calculus qua ký hiệu chức năng thường xuyên để tính toán thời gian chạy thuật toán?

Có nhiều lợi thế khi sử dụng Lisp hoặc lập trình chức năng và tính toán thời gian chạy thuật toán chỉ là một khả năng (mặc dù nó sẽ hữu ích nếu bạn trích dẫn một ref cho điều đó). vì nó đã có trong ký hiệu chức năng đôi khi xác định các công thức cho thời gian chạy thông qua quan hệ cảm ứng hoặc lặp lại có thể có mối quan hệ rõ ràng hơn hoặc rõ ràng hơn với mã gốc. các loại phân tích khác của thuật toán cũng được đơn giản hóa.

lợi thế chính khác là đơn giản cú pháp. trình phân tích cú pháp cho các ngôn ngữ khác rất phức tạp nhưng trình phân tích cú pháp Lisp rất đơn giản. vì vậy Lisp là một ngôn ngữ tuyệt vời để nghiên cứu lý thuyết phân tích cú pháp.

một khía cạnh quan trọng khác là phân tích phần mềm nhiều hơn từ góc độ / quan điểm logic hoặc toán học hơn là quan điểm "khoa học máy tính".

như câu trả lời khác chỉ ra, Lisp là tất cả về đệ quy thay vì lặp lại và đệ quy là rất nhiều ở trung tâm của CS.

nhiều sự ủng hộ hơn cho " -view" và chi tiết có thể được tìm thấy trong [1], một tài liệu tham khảo trực tuyến và bán kết miễn phí.λ

[1] Cấu trúc và giải thích các chương trình máy tính, bởi Abelson & Sussman

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.