Elisp

2013-09-25 2 views
10

में फ़िल्टर फ़ंक्शन क्या Emacs Lisp में उच्च-आदेश फ़ंक्शन filter के बराबर है? पायथन या जावास्क्रिप्ट से फ़ंक्शन की तरह।Elisp

(filter-equivalent (lambda (n) (= (% n 2) 0)) '(1 2 3 4 5 6 7 8)) 

==> (2 4 6 8) 
+1

संभव डुप्लिकेट http://stackoverflow.com/questions/2234860/lisp-filter-out-results-from-list-not-matching-predicate) –

उत्तर

12

यह cl-remove-if-not है। एक मुट्ठी भर, लेकिन यह काम करता है।

थोड़ा विस्तार से बता दें आप

(require 'cl-lib) 

जरूरत है इस समारोह के लिए। इसके लिए एक उपनाम, remove-if-not कहा जाता रहा, इसका इस्तेमाल करने के बाद से यह है कि मैं cl से remove-if-not उपयोग कर रहा हूँ लग सकता है नहीं पसंद करते हैं, लेकिन ।

सी ++, में using namespace std नहीं कर रहे हैं, लेकिन प्रत्येक बार std::cout कहकर उपसर्ग शामिल करने के लिए यह एक अच्छा अभ्यास है।

+1

Emacs 23 में, सीएल संगतता पैकेज में 'निकालें- if' और' निकालें-if-not' नहीं लगता है। – Vatine

+0

@Vatine Emacs 24 'हटाने-if' और' हटाने-अगर-not' भी, आप इसे जवाब के रूप में पोस्ट करना चाहिए, क्योंकि उन में बनाया जाता है – jcubic

+0

@Vatine, @jbubic:। 'हटाने-अगर-not' Emacs में 23 इसकी सीएल संगतता सुविधाओं का हिस्सा है, इसे 'cl-seq.el' में परिभाषित किया गया है। यह कम से कम मेरे अनुभव में, 'कुछ भी' की आवश्यकता के बिना हमेशा उपलब्ध है। शायद पुराने Emacs संस्करणों में, 'cl-seq.el' को डिफ़ॉल्ट कॉन्फ़िगरेशन द्वारा लोड नहीं किया गया था? –

11

तृतीय पक्ष dash.el लाइब्रेरी के विकल्प के रूप में -filter फ़ंक्शन प्रदान करता है।

(-filter 'evenp '(1 2 3 4 5 6 7 8)) 

;; => (2 4 6 8) 
[तुतलाना फिल्टर बाहर सूची से मिलान करने नहीं विधेय से परिणाम] (की
+1

dash.el वास्तव में गंभीर Emacs Lisp प्रोग्रामिंग के लिए एक पुस्तकालय होना चाहिए :) – lunaryorn

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