Là tính toán lambda và logic kết hợp giống nhau?


26

Tôi hiện đang đọc " Lambda- Compus and Combinators " của Hindley và Seldin. Tôi không phải là một chuyên gia, nhưng luôn quan tâm đến tính toán lambda vì liên quan đến lập trình chức năng (bắt đầu với Lisp và SICP, và bây giờ với R và Haskell).

Trong " Tính toán nhị phân Lambda và logic kết hợp" , John Tromp tuyên bố:

CL có thể được xem như là một tập hợp con của phép tính lambda ... các lý thuyết phần lớn giống nhau, trở nên tương đương với sự có mặt của quy tắc mở rộng.

Trong những điều kiện nào người ta sẽ sử dụng logic kết hợp thay vì tính toán lambda ?

Bất kỳ tài liệu tham khảo sẽ được đánh giá cao.


Hãy xem "Lambda tính toán: cú pháp và ngữ nghĩa của nó" của HP Barendregt.
Kaveh

Câu trả lời:


15

Điều khác biệt logic tổ hợp là nó là biến miễn phí. Điều này đôi khi hữu ích trong siêu dữ liệu và logic triết học, trong đó trạng thái của các biến là khó khăn.

Nó cũng có thể hữu ích trong việc triển khai, vì việc quản lý các biến có thể là một vấn đề đau đầu. Cf., ví dụ, Hughes, 1982, Super-combinators: Một phương thức triển khai mới cho các ngôn ngữ ứng dụng


3
Logic kết hợp không còn được coi là hữu ích trong việc triển khai và nó không bao giờ được sử dụng vì "quản lý các biến có thể là một vấn đề đau đầu". Các bộ kết hợp và các biến thể đã được sử dụng để thực hiện giảm biểu đồ cho các ngôn ngữ lười biếng, nhưng ngày nay Haskell (ngôn ngữ lười biếng nổi bật nhất) sử dụng các kỹ thuật hợp lý hơn nhiều để thực hiện giảm biểu đồ.
Blaisorblade

Xem ví dụ S. Peyton Jones, 1992, "Thực hiện chức năng ngôn ngữ lười biếng trên phần cứng cổ phiếu: các nhu nhược Tagless G-máy" - research.microsoft.com/copyright/accept.asp?path=/users/simonpj/...
Blaisorblade

2
@Blaisorblade: Các bộ kết hợp và biến thể đã được sử dụng để thực hiện giảm biểu đồ cho các ngôn ngữ lười biếng - Hãy cẩn thận: Haskell và ghc không giống nhau, và tài liệu có chứa một số Haskells dựa trên siêu kết hợp. Nhưng đó là sự thật, công nghệ tiên tiến trong lập trình chức năng đã tìm thấy những lợi thế hiệu quả của việc xử lý các môi trường vượt xa sự phức tạp của nó. Bạn vẫn thấy các siêu kết hợp được sử dụng, ví dụ, trong lập trình logic bậc cao, trong đó điều này không đúng. Supercombinators vẫn là một phần của kho kỹ thuật được sử dụng để thực hiện lập trình bậc cao.
Charles Stewart

Supercombinators chỉ tránh các biến miễn phí, không bị ràng buộc, vì vậy IMHO chúng không thể được coi là sử dụng logic kết hợp mỗi se. Họ chủ yếu là các điều khoản lambda đặc biệt. Có sự khác biệt nhỏ hơn nhiều giữa các siêu kết hợp, các chương trình nâng cấp lambda (nếu có, không chắc chắn) và triển khai của GHC (trong đó các con trỏ từ một bao đóng đến các biến miễn phí của nó có thể được sao chép từ chức năng máy chủ, nhờ độ tinh khiết). Phải nói rằng, tôi cũng đã nghĩ đến Trình biên dịch Utrecht Haskell gần đây, rất giống với GHC, nhưng IIRC sử dụng lambda-nâng; Tuy nhiên, đó không phải là CL.
Blaisorblade

Tôi không biết về lập trình logic bậc cao - Tôi đã tìm thấy bài viết này trên đó: springerlink.com/content/t68777w270713p5n . Thật không may, tôi không có thời gian để đọc nó.
Blaisorblade

4

Tham khảo bình luận của John Tromp, tôi muốn nhận xét rằng logic kết hợp cảm thấy rất khác với tính toán lambda. Vì sở thích của bạn bắt nguồn từ lập trình chức năng, bạn thực sự không muốn biết nhiều về logic kết hợp.

Hướng dẫn yêu thích của tôi về logic kết hợp là trong các ghi chú bài giảng từ Đại học Cambridge.

Tuy nhiên, chúng được giới thiệu để giải thích việc thực hiện các ngôn ngữ được gọi là lười biếng (hoặc áp dụng); như đã đề cập trong bình luận trước đây của tôi, các kỹ thuật như vậy hiện đã lỗi thời.


Vì các ngôn ngữ kết hợp không còn được sử dụng để thực hiện các ngôn ngữ lười biếng / ứng dụng, trạng thái của các kỹ thuật nghệ thuật bây giờ là gì? Và có một tên / thể loại để phân loại các kỹ thuật này?
CMCDragonkai

@CMCDragonkai Xem bình luận cho cstheory.stackexchange.com/a/306/989 để thảo luận. Câu trả lời thực tế ngắn gọn là "xem các bài viết về những gì GHC làm": có nhiều kỹ thuật khác nhau (bao gồm cả máy STG và tối ưu hóa như phân tích nghiêm ngặt) được kết hợp với nhau để làm cho các chương trình lười biếng nhanh chóng.
Blaisorblade
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.