2012-06-25 15 views
7

मैं तुतलाना Emacs में मेरी पहली कोड के कुछ लिखने की कोशिश कर रहा हूँ और मैं निम्नलिखित व्यवहारआदेश तुतलाना

(defun sq (x) (* x x)) 

(member 9 '(1 2 3 4 (sq 3))) 

यह nil का आकलन करती है, लेकिन मूल्य मैं उम्मीद कर रहा था (9) था नहीं समझ सकता

अब मुझे लगता है कि * emacs lisp आवेदक-ऑर्डर मूल्यांकन का उपयोग करता है, तो फ़ंक्शन लागू होने से पहले सूची का मूल्यांकन क्यों नहीं किया गया था? क्योंकि (sq 3) है काम करता है

जब से मैं यह सिर्फ, मैं अंत में इस प्रकार यह काम कर सकता है एक गैर शून्य हालत के परीक्षण के लिए की जरूरत है,

(member 9 (cons (sq 3) '(1 2 3 4))) 

जो (9 1 2 3 4)

मेरा प्रश्न का आकलन करती है पहले के उदाहरण के विपरीत एक समारोह (विपक्ष) के लिए "प्रत्यक्ष" तर्क जहां यह तर्क के अंदर एक तत्व था? cons का उपयोग यहां एक स्वीकार्य कामकाज का उपयोग कर रहा है या वांछित व्यवहार पाने के लिए एक बेहतर/सही तरीका है?

* यह सुनिश्चित करने के लिए कि ऑर्डर मूल्यांकन emacs lisp उपयोगों के बारे में पता नहीं लगा सका, मैंने योजना दुभाषिया में एक ही अभिव्यक्ति की कोशिश की और मुझे एक ही जवाब मिला और एसआईसीपी से मुझे पता चला कि योजना आवेदक आदेश मूल्यांकन का उपयोग करती है। अब मैं वास्तव में वास्तव में उलझन में हूँ!

किसी भी मदद की सराहना की।

उत्तर

16

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

(member 9 `(1 2 3 4 ,(sq 3))) 

Backquote सामान्य उद्धृत करने के लिए समान रूप से व्यवहार करती है,: आप जबकि शाब्दिक रूप में अन्य लोगों के गुजर सूची के कुछ तत्वों का मूल्यांकन करने के चाहते हैं, तो सबसे सुविधाजनक रूप backquote, यानी उपयोग करने के लिए है सूची में वापस प्रतिस्थापित मूल्यांकन के परिणामस्वरूप, अल्पविराम द्वारा मूल्यांकन किया जाता है।

(member 9 (list 1 2 3 4 (sq 3))) 
+0

धन्यवाद एक बहुत:

वैकल्पिक रूप से, आप list समारोह है, जो अपने मापदंडों का मूल्यांकन करता है (जब तक स्पष्ट रूप से उद्धृत) इस्तेमाल कर सकते हैं। यह सहायक था :) – naiquevin

+1

@naiquevin, मेरी खुशी। –

संबंधित मुद्दे