में बहु पैरामीटर समारोह की कमजोर-memoizing परिणाम मैं एक तरह से एक OCaml समारोह f
कि (सामान्य रूप में या एक से अधिक,) दो पैरामीटर लेता है के परिणामों memoize करने के लिए देख रहा हूँ। इसके अलावा (और यह मुश्किल हिस्सा है), मैं चाहता हूं कि इस प्रक्रिया को अंतर्निहित नतीजा पूरी तरह से न भूलें यदि दो पैरामीटर के मानों में से कोई भी कचरा एकत्रित होता है।OCaml
एक समारोह है कि ठीक एक तर्क लेता के लिए, यह Weak
मॉड्यूल और एक सरल तरीके से अपने Make
functor के साथ किया जा सकता है। इसे किसी ऐसे चीज के लिए सामान्यीकृत करने के लिए जो उच्च धर्मार्थ के कार्यों को याद कर सके, एक बेवकूफ समाधान मूल्य मानों के मूल्यों के परिणामस्वरूप कमजोर मानचित्र बनाना है। लेकिन यह कचरा संग्रह के संबंध में सही ढंग से काम नहीं करेगा, क्योंकि मूल्यों का ट्यूप केवल ज्ञापन समारोह के दायरे में मौजूद है, न कि क्लाइंट कोड जो f
पर कॉल करता है। वास्तव में, कमजोर संदर्भ टुपल के लिए होगा, जो ज्ञापन (सबसे खराब मामले में) के बाद सही कचरा इकट्ठा किया जा रहा है।
वहाँ फिर से लागू करने Weak.Make
बिना यह करने के लिए कोई तरीका है?
हैश-consing मेरी जरूरतों के orthogonal है और, वास्तव में मेरी मूल्यों के लिए वास्तव में वांछनीय नहीं है,।
धन्यवाद!
मैं देख सकता हूं कि पहले पैरामीटर मान का कचरा संग्रह दूसरे पैरामीटर के लिए संबंधित तालिका को मुक्त करने के परिणामस्वरूप होगा।हालांकि, दूसरे पैरामीटर के लिए तालिका में एक मान जीसीइंग अपने माता-पिता के लिए कुछ भी नहीं करता है (यदि 'वीक' मॉड्यूल का उपयोग किया जाता है), भले ही परिणामस्वरूप नक्शा खाली हो। बेशक यह मानचित्र की सामग्रियों को सक्रिय रूप से स्कैन करके और खाली तालिकाओं पर मैप करने वाली पहली पैरामीटर कुंजियों को हटाकर किया जा सकता है। – Nikos
ठीक है, जैसा कि मैंने कहा था कि द्वितीयक तालिका तब तक एकत्र नहीं की जाएगी जब तक कि पहला पैरामीटर मुक्त न हो जाए। लेकिन ज्ञात वापसी मूल्य एकत्र किया जाएगा (यह मुझे लगता है)। –