Czy istnieje odpowiednik funkcji wyższego rzędu filter
w Emacs Lisp? Podobnie jak funkcja z Pythona lub Javascript.Funkcja filtra w Elisp
(filter-equivalent (lambda (n) (= (% n 2) 0)) '(1 2 3 4 5 6 7 8))
==> (2 4 6 8)
Czy istnieje odpowiednik funkcji wyższego rzędu filter
w Emacs Lisp? Podobnie jak funkcja z Pythona lub Javascript.Funkcja filtra w Elisp
(filter-equivalent (lambda (n) (= (% n 2) 0)) '(1 2 3 4 5 6 7 8))
==> (2 4 6 8)
To jest cl-remove-if-not
. Trochę łyka, ale działa.
Aby rozwinąć trochę, trzeba
(require 'cl-lib)
aby uzyskać tę funkcję. Jest na to alias, zwany remove-if-not
, ale Wolę go nie używać, ponieważ może wyglądać tak, jakbym używał remove-if-not
z cl
.
Dobrze jest dołączyć przedrostek, nie wykonując using namespace std
w C++, , ale za każdym razem mówiąc: std::cout
.
W Emacs 23, wydaje się, że w pakiecie zgodności cl znajdują się 'remove-if' oraz' remove-if-not'. – Vatine
@Vatine Emacs 24 ma również opcję "remove-if" i "remove-if-not", powinieneś opublikować ją jako odpowiedź, ponieważ są one wbudowane. – jcubic
@Vatine, @jbubic: 'remove-if-not' w Emacs 23 jest częścią jego funkcji zgodności z CL, jest zdefiniowany w 'cl-seq.el'. Jest to zawsze dostępne bez potrzeby "niczego", przynajmniej w moim doświadczeniu. Może w starszych wersjach Emacsa 'cl-seq.el' nie został załadowany przez domyślną konfigurację? –
możliwe duplikat [lisp odfiltrowania wyników z listy nie pasujące predykatu] (http://stackoverflow.com/questions/2234860/lisp-filter-out-results-from-list-not-matching-predicate) –