Tôi đang tìm cách ghi nhớ kết quả của hàm OCaml f
có hai tham số (hoặc nhiều hơn, nói chung). Ngoài ra (và đây là phần khó), tôi muốn bản đồ nằm dưới quá trình này để quên một kết quả hoàn toàn nếu một trong hai giá trị của hai tham số là rác được thu thập.Kết quả ghi nhớ yếu của hàm đa tham số trong OCaml
Đối với hàm có chính xác một đối số, điều này có thể được thực hiện với mô-đun Weak
và hàm f2tor Make
một cách đơn giản. Để khái quát hóa điều này thành một cái gì đó có thể ghi nhớ các hàm có tính chất cao hơn, một giải pháp ngây thơ là tạo ra một bản đồ yếu từ các giá trị tuples đến các giá trị kết quả. Nhưng điều này sẽ không hoạt động chính xác đối với việc thu gom rác, vì bộ giá trị chỉ tồn tại trong phạm vi chức năng ghi nhớ, không phải mã khách hàng gọi f
. Trong thực tế, các tài liệu tham khảo yếu sẽ được để các tuple, đó sẽ là rác thu thập ngay sau khi ghi nhớ (trong trường hợp xấu nhất).
Có cách nào để thực hiện việc này mà không cần triển khai lại Weak.Make
không?
Tính năng băm nhỏ là trực giao với các yêu cầu của tôi và trên thực tế, không thực sự mong muốn đối với các giá trị của tôi.
Cảm ơn!
Tôi có thể xem cách thu thập rác của giá trị tham số đầu tiên sẽ dẫn đến giải phóng bảng tương ứng cho tham số thứ hai.Tuy nhiên, GCing một giá trị trong một bảng cho tham số thứ hai không có gì cho cha mẹ của nó (nếu mô-đun 'Yếu 'được sử dụng), ngay cả khi bản đồ kết quả trống. Tất nhiên điều này có thể được thực hiện bằng cách chủ động quét nội dung của bản đồ và xóa bất kỳ khóa thông số đầu tiên nào ánh xạ tới các bảng trống. – Nikos
Phải, như tôi đã nói bảng phụ sẽ không được thu thập cho đến khi tham số đầu tiên được giải phóng. Nhưng giá trị trả lại được ghi nhớ sẽ được thu thập (có vẻ như với tôi). –