Định nghĩa của tổ hợp Y trong F # là
let rec y f x = f (y f) x
f hy vọng sẽ có một đối số đầu tiên một số tiếp tục cho các bài toán con đệ quy. Sử dụng yf như một sự tiếp nối, chúng tôi thấy rằng f sẽ được áp dụng cho các cuộc gọi liên tiếp khi chúng tôi có thể phát triển
let y f x = f (y f) x = f (f (y f)) x = f (f (f (y f))) x etc...
Vấn đề là, một ưu tiên, lược đồ này không sử dụng bất kỳ tối ưu hóa cuộc gọi đuôi nào: thực sự, có thể có một số thao tác đang chờ xử lý trong f, trong trường hợp đó chúng ta không thể thay đổi khung ngăn xếp cục bộ được liên kết với f.
Vì thế :
- ở một đầu, sử dụng bộ kết hợp Y yêu cầu tiếp tục khác biệt rõ ràng so với chính chức năng.
- trên othe để áp dụng TCO, chúng tôi muốn không có hoạt động nào đang chờ xử lý trong f và chỉ gọi chính nó.
Bạn có biết bất cứ cách nào mà hai người đó có thể được hòa giải? Giống như một Y với thủ thuật tích lũy, hay một Y với thủ thuật CPS? Hoặc một lập luận chứng minh rằng không có cách nào có thể được thực hiện?
f
. Chúng ta có thể thấy rằng y
có thể nối đuôi f
với một thunk (y f)
, nhưng như bạn nói f
có thể có một số hoạt động đang chờ xử lý. Tôi nghĩ sẽ rất thú vị nếu biết nếu có một tổ hợp riêng biệt thân thiện hơn với đuôi. Tôi tự hỏi nếu câu hỏi này sẽ được chú ý tốt hơn trên trang web CS Stackexchange?