लघु जवाब के साथ कहेंगे: हाँ , यह है।
लांग जवाब:
आप ने लिखा है:
(defmethod some-fn ((num (eql "A")) (print "a specifict string")))
=> doesn't compile
क्योंकि आप वाक्य रचना गलत मिला है यही कारण है कि। यह होना चाहिए:
(defmethod some-fn ((num (eql "A"))) (print "a specific string"))
=> does compile
कौन सा आम तौर पर इस प्रारूप में उपलब्ध है:
(defmethod some-fn ((num (eql "A")))
(print "a specifict string"))
आप इसे इस तरह से प्रारूप और अपने पसंदीदा संपादक के अंतर्निहित खरोज उपकरण का उपयोग करते हैं, तो आप देखेंगे कि खरोज दिखता है
(defmethod some-fn ((num (eql "A"))
(print "a specifict string")))
यह भी संकलक द्वारा दिखाए गए त्रुटि संदेश को समझने की कोशिश करने में मदद कर सकते हैं: अपने कोड के लिए गलत।
वापस विषय के लिए:
आप CLOS में EQL प्रेषण के लिए किसी अन्य लिस्प वस्तु के रूप में तार का उपयोग कर सकते हैं।
यह सिर्फ इतना है कि "ए" और ईक्यूएल की तरह कई संभव तार हैं जो पहचान के लिए तुलना करते हैं (संख्याओं और पात्रों के लिए अपवाद के साथ)। ईक्यूएल तारों की तुलना उनके पात्रों से नहीं करता है।
आमतौर पर (ईक्यूएल "ए" "ए") शून्य लौटाता है। (साइड नोट: वास्तव में संकलक द्वारा संकलित कोड में यह अभिव्यक्ति सैद्धांतिक रूप से टी हो सकती है क्योंकि संकलक को संकलित कोड में स्थान बचाने के लिए डेटा ऑब्जेक्ट का पुन: उपयोग करने की अनुमति है।यहाँ हम शाब्दिक तार, डेटा वस्तुओं आप कमांड लाइन
(some-fn "A")
यह EQL प्रेषण ट्रिगर नहीं करेगा पर डाल देते हैं तो कर सकते है।)
।
लेकिन इस उम्मीद के रूप में काम करता है:
(defparameter *a-string* "A")
(defmethod some-fn ((num (eql *a-string*)))
(print "a specific string")))
और फिर
(some-fn *a-string*)
तुम्हें यकीन चर एक मूल्य है कि बनाने की जरूरत है। चर का मूल्यांकन किया जाता है, जब DEFMETHOD रूप का मैक्रो विस्तार मूल्यांकन किया जाता है। मान तब ऑब्जेक्ट है जिसका उपयोग ईक्यूएल प्रेषण के लिए किया जाता है।
जैसा कि डिर्क ने अपने उत्तर में उल्लेख किया है, कोई प्रतीक का उपयोग कर सकता है। प्रतीकों का उद्देश्य यह है कि (ईक्यूएल '| ए |' | ए |) आमतौर पर टी। सिग्नल पढ़ने की प्रक्रिया के दौरान ईक्यू बनाते हैं।
सारांश: तार से अधिक
EQL प्रेषण CLOS में काम करता है। व्यावहारिक उपयोग के लिए, आपको EQL, स्ट्रिंग के संदर्भ में फ़ंक्शन को उसी के साथ कॉल करने की आवश्यकता है।
ओपीएस। वाक्यविन्यास त्रुटि भी नोटिस नहीं किया था। अच्छी पकड़। तकनीकी रूप से, एक ही स्ट्रिंग इंस्टेंस का उपयोग करते हुए (जैसा कि "एक ही सामग्री वाले स्ट्रिंग" के विपरीत) कुछ प्रकार के इंटर्निंग/मैन्युअल रूप से एकजुट करने के लिए होता है, यदि आपके स्ट्रिंग बाहरी स्रोतों से आते हैं (कहें, फ़ाइल या किसी ऐसे से पढ़ें) जो शायद यहां अव्यवहारिक सादा तारों का उपयोग करके प्रस्तुत करें। – Dirk
हाँ, मैंने इसे गलत कॉपी किया। मैं emacs आदि का उपयोग कर रहा हूँ ... यह एक दोस्त से एक सवाल था कि मैं जवाब नहीं दे सका। मुझे इसे ठीक करने के लिए defparam के उपयोग पसंद है। क्या वह पूरी तरह से पोर्टेबल है? – mhb
@ एमएचबी: हाँ, यह पोर्टेबल होना चाहिए –