द्वारा उत्पन्न नामों के साथ कॉल नहीं कर सकता है। मैं कुछ सामान्य डेटा के आधार पर एक से अधिक फ़ंक्शंस उत्पन्न करने के लिए ELisp
मैक्रो लिखने की कोशिश कर रहा हूं। उदाहरण के लिए, जब मैं fn नाम मैं की तरह कुछ लिखने की गणना करना चाहते हैं (मैं पल के लिए स्वच्छता अनदेखी कर रहा हूँ, मैं एक प्रतीक शाब्दिक मैक्रो में तो मूल्यांकन में कोई फर्क नहीं करना चाहिए गुजर रहा हूँ):मैक्रो में परिभाषित कार्यों को कॉल-प्रतीक
(cl-defmacro def-fns (sym)
"SYM."
(let ((s1 (make-symbol (concat (symbol-name sym) "-1")))
(s2 (make-symbol (concat (symbol-name sym) "-2"))))
`(progn (defun ,s1() (+ 1 2 3))
(defun ,s2() "six"))))
जिसे मैं आग्रह करते समय 2 एफएन उत्पन्न करने की उम्मीद करता हूं, जिसे foo-1
और foo-2
कहा जाता है।
मैं तो और FNS तो जैसे मैक्रो आह्वान करने के लिए सक्षम होना चाहिए:
(def-fns foo)
(foo-1)
;; => 6
(foo-2)
;; -> "six
Emacs में (def-fns foo)
की भी macroexpansion पता चलता है कि इस मामले होना चाहिए:
(progn
(defun foo-1 nil (+ 1 2 3))
(defun foo-2 nil "six"))
हालांकि, जब मैं def-fns
परिभाषा का मूल्यांकन करता हूं और इसे उन कार्यों को उत्पन्न करता हूं। यह एक केस क्यों है? यह तकनीक कॉमन लिस्प और क्लोजर में काम करती है (जिसमें बहुत ही समान मैक्रो सिस्टम हैं), तो एलिसप में क्यों नहीं?
दरअसल। यह थोड़ी देर के बाद से मैंने सीएल/क्लोजर/एलिस्प स्टाइल मैक्रोज़ लिखा है और सीएल की तुलना में एलिसप में स्पष्ट रूप से आसान बनाने के लिए यह एक आसान गलती है :) – jjpe