प्रश्न के बारे में कीवर्ड इस्तेमाल नहीं किया जाता है, लेकिन वास्तव में के बारे में कीवर्ड कार्यान्वयन। उदाहरण के लिए, जब मैं कीवर्ड पैरामीटर के साथ कुछ फ़ंक्शन बनाता हूं और कॉल करता हूं:कीवर्ड सामान्य लिस्प में कैसे काम करते हैं?
(defun fun (&key key-param) (print key-param)) => FUN
(find-symbol "KEY-PARAM" 'keyword) => NIL, NIL ;;keyword is not still registered
(fun :key-param 1) => 1
(find-symbol "KEY-PARAM" 'keyword) => :KEY-PARAM, :EXTERNAL
किसी तर्क को पारित करने के लिए किसी कीवर्ड का उपयोग कैसे किया जाता है? कीवर्ड वे प्रतीक हैं जिनके मूल्य स्वयं हैं, तो किसी कीवर्ड का उपयोग करके संबंधित पैरामीटर को कैसे बाध्य किया जा सकता है?
कीवर्ड के बारे में एक और सवाल - कीवर्ड का उपयोग पैकेज को परिभाषित करने के लिए किया जाता है।
(defpackage :KEY-PARAM) => #<The KEY-PARAMETER package, 0/16 ...
(in-package :KEY-PARAM) => #<The KEY-PARAMETER package, 0/16 ...
(defun fun (&key key-param) (print key-param)) => FUN
(fun :KEY-PARAM 1) => 1
कैसे प्रणाली पैकेज का नाम और समारोह पैरामीटर नाम के बीच :KEY-PARAM
के उपयोग भेद करता है: हम एक पैकेज पहले से ही विद्यमान कीवर्ड के साथ नामित किया गया परिभाषित कर सकते हैं? इसके अलावा हम कुछ और अधिक जटिल बना सकते हैं, तो हम समारोह KEY-PARAM
को परिभाषित करने और इसे निर्यात (वास्तव में ढंग से काम नहीं है, लेकिन नाम) यदि:
(in-package :KEY-PARAM)
(defun KEY-PARAM (&key KEY-PARAM) KEY-PARAM) => KEY-PARAM
(defpackage :KEY-PARAM (:export :KEY-PARAM))
;;exporting function KEY-PARAM, :KEY-PARAM keyword is used for it
(in-package :CL-USER) => #<The COMMON-LISP-USER package, ...
(KEY-PARAM:KEY-PARAM :KEY-PARAM 1) => 1
;;calling a function KEY-PARAM from :KEY-PARAM package with :KEY-PARAM parameter...
सवाल एक ही है, कैसे कॉमन लिस्प यहां कीवर्ड :KEY-PARAM
के उपयोग भेद करता है ?
यदि उनके मैकेनिक्स के स्पष्टीकरण के साथ आम लिस्प में कीवर्ड के बारे में कुछ मैनुअल है, तो यदि आप यहां एक लिंक पोस्ट करते हैं तो मैं आभारी रहूंगा, क्योंकि मुझे केवल कीवर्ड के उपयोग के बारे में कुछ छोटे लेख मिल सकते हैं।
धन्यवाद! सबकुछ अब स्पष्ट है, यह वास्तव में सहायक है! – TheEnt
@ बाड़ार * "** (मज़ेदार मज़ा (और कुंजी कुंजी-param) ...) ** वास्तव में निम्न के लिए छोटा है: ** (मज़ेदार मज़ा (और कुंजी ((: key-param key-param))) ...) ** "* अपवाद के साथ कि पहले के बाद," कुंजी-पैराम "नामक एक प्रतीक को अभी तक कीवर्ड पैकेज में इंटर्न नहीं किया गया है (कम से कम ओपी की प्रतिलेख के अनुसार)।अगर यह एक शॉर्टेंड था जहां आर्किगिस्ट का विस्तार किया जा रहा था (और शायद एक कार्यान्वयन ऐसा कर सकता था; मुझे यकीन नहीं है कि इसकी अनुमति होगी या नहीं), तो कीवर्ड मैक्रो-विस्तार समय पर प्रशिक्षित किया गया होगा। (यह विशेष रूप से महत्वपूर्ण नहीं है, लेकिन यह defun के कार्यान्वयन में से कुछ "रिसाव" (या नहीं) इंगित करता है।) –