function एलिसप में लैम्ब्डा अभिव्यक्ति कैसे पारित करें



emacs lambda (1)

इसलिए, मैं एलिसिप में एक सामान्य वेब खोज फ़ंक्शन बनाने की कोशिश कर रहा हूं:

(defun look-up-base (url-formatter)
  (let (search url)
    (setq search(thing-at-point 'symbol))
    (setq url (url-formatter search))
    (browse-url url))
  )

यह फ़ंक्शन केवल कर्सर के नीचे शब्द को पकड़ लेगा, वेब खोज के लिए यूआरएल फ़ॉर्मेटर का प्रयोग करके शब्द को प्रारूपित करेगा और फिर खोज को पूरा करने के लिए वेब ब्राउजर में खोज स्ट्रिंग को खोल देगा।

इसके बाद, मैं एक फ़ंक्शन को लागू करने की कोशिश करता हूं जो Google को कर्सर के नीचे के शब्द का उपयोग करके आधार के रूप में पिछले फ़ंक्शन का उपयोग करेगा।

(defun google ()
  (interactive)
  (look-up-base (lambda (search) (concat "http://www.google.com/search?q=" search))))

अगर मैं इसे मूल्यांकन करने की कोशिश करता हूं तो इमैक्स शिकायत नहीं करेगा, लेकिन जब मैं इसका इस्तेमाल करने की कोशिश करता हूं, तो इमाक्स मुझे यह त्रुटि संदेश देता है:

setq: Symbol's function definition is void: url-formatter

और मुझे कोई सुराग नहीं है कि ऐसा क्यों होता है। मैं समारोह के साथ कुछ भी गलत नहीं देख सकता, मैं क्या कर रहा हूँ गलत?


मुझे लगता है कि आपको funcall का उपयोग करने की आवश्यकता है:

(url-formatter search) बजाय आपके पास (funcall url-formatter search) होना चाहिए

लिस्प को एक सूची के पहले तत्व के रूप में एक समारोह का नाम होने की उम्मीद है। यदि आपके पास एक लैम्ब्डा अभिव्यक्ति या फ़ंक्शन नाम के साथ एक प्रतीक है, तो आपको funcall का उपयोग करना होगा





elisp