मैं निम्नलिखित कार्य हो:Emacs लिस्प: # से एक नया हैश तालिका हर बार पैदा नहीं करता
(defun inc-map()
(let ((ht #s(hash-table test contents-hash)))
(dolist (i (list 1 2 3 4))
(let ((old-val (or (gethash "foo" ht)
0)))
(puthash "foo" (+ 1 old-val) ht)))
ht))
तथ्य यह समारोह स्थानीय स्तर पर ht
प्रतीक परिभाषित करने के लिए लगता है कि बावजूद, समारोह प्रतीत नहीं होता संदर्भित पारदर्शी होना। विशेष रूप से, इसे एक बार कॉल करना हैश टेबल "foo" -> 4
लौटाता है, इसे दूसरी बार "foo" -> 8
देता है, एक तीसरा समय "foo" -> 12
देता है और इसी तरह।
वास्तव में यहां क्या चल रहा है और मैं इस फ़ंक्शन को संदर्भित रूप से पारदर्शी (और "foo" -> 4
प्रत्येक बार वापस कैसे बदल सकता हूं)?
क्या '' (1 2 3) 'को संशोधित करना संभव है, इसलिए यह वास्तव में न केवल' 1 2 3' के साथ सूची लौटाता है? – fghj
उपयोगकर्ता 1034749: मुझे यकीन नहीं है कि मैं सवाल समझता हूं। किसी भी एक्स के लिए 'एक्स' '(उद्धरण एक्स)' के लिए लघुरूप है। एक्स elisp पाठक द्वारा समझा कोई भी रूप हो सकता है, और यह पाठक द्वारा बनाई गई वस्तु का मूल्यांकन करेगा। 'Ch f quote' – phils
देखें, आप '# s' और' '(1 2 3)' के बीच समानता बनाते हैं, प्रश्न # # (कुछ) 'और' #s (कुछ)' में अलग-अलग परिणाम दे सकते हैं, तो क्या यह है '' (1 2 3) 'कई बार मूल्यांकन के विभिन्न परिणामों को प्राप्त करने के लिए संभव है? अगली बार '' (1 2 3) 'पहली बार, और' '(1 2 3 4)' की तरह? – fghj