बिल्ट-इन्स का उपयोग करके सूची से सामान को फ़िल्टर या चुनने के कई तरीके हैं जो लूप से बहुत तेज हैं। अंतर्निहित निकालें- अगर इस तरह इस्तेमाल किया जा सकता है। उदाहरण के लिए, मान लीजिए कि मैं सूची MyList में तत्वों को 3 से 10 छोड़ना चाहता हूं। उदाहरण के रूप में निम्न कोड निष्पादित करें:
(let ((MyList (number-sequence 0 9))
(Index -1)
)
(remove-if #'(lambda (Elt)
(setq Index (1+ Index))
(and (>= Index 3) (<= Index 5))
)
MyList
)
)
आपको '(0 1 2 6 7 8 9) मिलेगा।
मान लीजिए कि आप केवल 3 और 5 के बीच तत्व रखना चाहते हैं। आप मूल रूप से भविष्य में लिखे गए शर्त को फ़्लिप करते हैं।
(let ((MyList (number-sequence 0 9))
(Index -1)
)
(remove-if #'(lambda (Elt)
(setq Index (1+ Index))
(or (< Index 3) (> Index 5))
)
MyList
)
)
आप आप उपयोग कर सकते हैं जो कुछ भी आप विधेय जिसे आप निकालना-यदि करने के लिए प्रदान करना होगा के लिए की जरूरत मिल जाएगा '(3 4 5)
। उपयोग करने के बारे में आपकी कल्पना केवल एकमात्र सीमा है। आप अनुक्रम फ़िल्टरिंग फ़ंक्शंस का उपयोग कर सकते हैं, लेकिन आपको उनकी आवश्यकता नहीं है।
वैकल्पिक रूप से, आप कुछ फ़ंक्शन का उपयोग करके सूची में लूप करने के लिए मैपकार या मैपकार * का उपयोग भी कर सकते हैं जो विशिष्ट प्रविष्टियों को शून्य और उपयोग (निकालें- अगर शून्य ...) को नालों को छोड़ने के लिए बदल देता है।
स्रोत
2017-06-22 22:49:47
मैं यह इंगित करना चाहता हूं कि सामान्य लिस्प [¹] (http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/ में फ़ंक्शन '#' निकालें- if-not 'को बहिष्कृत नहीं किया गया है। हाइपरस्पेक/बॉडी/fun_removecm__elete-if-not.html) जहां फ़िल्टर लिखा जाएगा '(हटाएं-अगर (पूरक #' शाम) '(1 2 3 4 5))' या बस '(हटाएं-अगर #' oddp ' (1 2 3 4 5)) '- समारोह 'पूरक' हालांकि मेरे ज्ञान के लिए Emacs Lisp में मौजूद नहीं है। –
Pls * cl-lib * पैकेज का उपयोग करें, और ** cl-remove-if-not ** प्रतिस्थापन के रूप में कार्य करें का उपयोग करें। –