2011-01-14 24 views
5

Để tìm hiểu những gì một bộ kết hợp điểm cố định và được sử dụng cho, tôi đã viết của riêng mình. Nhưng thay vì viết nó với chức năng nghiêm chỉnh mang tính chất như Wikipedia's example, tôi chỉ sử dụng xác định:Kết hợp Y trong sơ đồ bằng cách sử dụng Định nghĩa

(define combine (lambda (functional) 
        (functional (lambda args (apply (combine functional) args)))) 

Tôi đã thử nghiệm điều này với functionals cho thừa và fibonacci, và có vẻ như để làm việc. Điều này có đáp ứng được định nghĩa chính thức của một bộ kết hợp điểm cố định không?

+0

Bài tập 2: Bộ kết hợp Y không sử dụng 'define' hoặc' letrec' :) – leppie

Trả lời

3

Câu trả lời là không, bởi vì theo the blog referred to in the previous answer, nó thậm chí không đáp ứng định nghĩa của combinator, vì 'kết hợp' là một miễn phí biến.

+2

Cảm ơn bạn đã chỉ ra điều đó. Chỉ cần chắc chắn rằng định nghĩa của blog là chính xác, bạn có xem xét nó tương đương với định nghĩa của Wikipedia không: "Một bộ kết hợp là một hàm bậc cao chỉ sử dụng ứng dụng chức năng và các bộ kết hợp được xác định trước đó để xác định kết quả từ các đối số của nó." Xem http://en.wikipedia.org/wiki/Combinatory_logic – AlcubierreDrive

5

EDIT: Trong khi chessweb hoặc bất kỳ ai khác chứng thực câu trả lời của mình, tạm thời xem xét câu trả lời đúng và điều này sai.


Có vẻ như câu trả lời là có. Rõ ràng cùng combinator chính xác xuất hiện here, nằm xuống trang:

(define Y 
    (lambda (f) 
     (f (lambda (x) ((Y f) x))))) 
+0

Bạn không nên. Bạn được khuyến khích trả lời các câu hỏi của bạn. IIRC bạn có thể chấp nhận câu trả lời của riêng bạn sau 2 ngày kể từ khi bạn trả lời. –

+0

@Yasir Tuyệt vời, cảm ơn! – AlcubierreDrive

+1

Điểm chính của việc giảng dạy bộ kết hợp Y là xem cách bạn có thể * thực hiện * đệ quy chỉ với các hàm. Bằng cách viết một định nghĩa đệ quy, bạn không làm điều đó - vì vậy bạn kết thúc với một cái gì đó hoạt động, nhưng nó chỉ hữu ích trong việc hiểu những gì Y phải làm. Văn bản của Mike sẽ là một nơi tốt để đọc sâu về nó và xem phiên bản 'define'-less xuất phát như thế nào. –

Các vấn đề liên quan