सबसे पहले, मैं lisp के लिए बहुत नया हूँ, इसलिए यह संभव है कि मैं बस कुछ स्पष्ट याद कर रहा हूँ। उस ने कहा, मेरे पास प्रैक्टिकल कॉमन लिस्प है जो मेरे बगल में खुला है और सीएल हाइपर स्पेक अगले टैब में खुलता है, और इस समस्या को हल करने में असमर्थ रहा है:सामान्य लिस्प: फ़ाइल से पढ़ने पर गलत पैकेज के लिए cl lnterning प्रतीकों क्यों है?
मैं एक फ़ाइल से एक पेड़ पढ़ने की कोशिश कर रहा हूं, और मूल्य आवंटित करता हूं एक कक्षा में स्लॉट्स इस कोड का उपयोग करने के लिए:
(defun load-char (file)
(with-open-file (in file)
(with-standard-io-syntax
(let ((chr-in (read in))
(chr (make-instance 'pc)))
(mapcar #'(lambda (x) (setf (slot-value chr (car x)) (cdr x))) chr-in)
chr))))
जब मैं मूल रूप से एक साथ इस हैक कर लिया और सीएल-उपयोगकर्ता पैकेज सब कुछ के तहत यह भागा पूरी तरह से काम किया है - मैं अपने आप को काफी गर्व था, वास्तव में। समस्या तब शुरू हुई जब मैंने अपनी कक्षा परिभाषा और नए पैकेज में कुछ सहायक कार्यों के साथ इसे पैक किया। मैंने asdf का उपयोग करके पैकेज लोड किया, फिर मेरे आरईपीएल के सक्रिय पैकेज को बदलने के लिए (in-package :package-name)
का उपयोग किया।
अब जब मैं चलाता हूं तो मुझे एक त्रुटि मिलती है जो COMMON-LISP-USER::ID
(आईडी मेरे पीसी वर्ग में पहला स्लॉट है) मौजूद नहीं है, इसलिए मैंने यह देखने के लिए लिखा कि जब मैं फ़ाइल को पढ़ता हूं तो वास्तव में क्या प्राप्त हो रहा था:
(defun load-char-test (file)
(with-open-file (in file)
(with-standard-io-syntax
(let ((chr-in (read in))
(chr (make-hash-table)))
(mapcar #'(lambda (x) (setf (gethash (car x) chr) (cdr x))) chr-in)
(maphash #'(lambda (k v) (format t "~a: ~a~%" k v)) chr)
chr))))
फिर आरईपीएल में मैं (defparameter hsh (load-char-test "/path/to/file"))
करते हैं और सब कुछ त्रुटियों के बिना चला जाता है, और मेरे प्रारूप कॉल रिटर्न वास्तव में मैं क्या उम्मीद (स्लॉट: VALUE)। लेकिन जब मैं (gethash 'id hsh)
करता हूं तो यह NIL NIL
देता है। लेकिन, जब मैं (gethash 'common-lisp-user::id hsh)
करता हूं तो यह अपेक्षित मूल्य देता है।
तो, मैं सबकुछ ठीक से पढ़ रहा हूं, लेकिन मेरी सूची में सब कुछ मुझे परिभाषित किए गए COMMON-LISP-USER पैकेज के अंतर्गत प्रशिक्षित किया जा रहा है, और मैं यह नहीं समझ सकता कि क्यों। सहायता की बहुत सराहना की जाती है।
पीएस क्षमा करें अगर यह पोस्ट अनावश्यक रूप से लंबा है, तो मैं सिर्फ यह दिखाना चाहता था कि मैंने वास्तव में इसे स्वयं समझने की कोशिश की थी। READ
द्वारा बनाई
क्या इसका मतलब है? http://pastebin.com/e0xmUAmp। यह अभी भी सीएल-यूजर के तहत इंटर्न कर रहा है। – oobivat
@oobivat: मेरा उत्तर देखें। एलईटी के साथ मैक्रो के साथ-मानक-आईओ-सिंटैक्स के अंदर होना चाहिए। –
यहां फिक्स्ड: http://pastebin.com/f0V06uzm। तेज़ उत्तरों के लिए धन्यवाद। – oobivat