2013-09-25 44 views
10

Có tương đương với hàm bậc cao hơn filter trong Emacs Lisp không? Giống như chức năng từ python hoặc Javascript.Chức năng lọc trong Elisp

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

==> (2 4 6 8) 
+1

thể trùng lặp của [filter lisp ra kết quả ra khỏi danh sách không phù hợp với vị ngữ] (http://stackoverflow.com/questions/2234860/lisp-filter-out-results-from-list-not-matching-predicate) –

Trả lời

12

Đó là cl-remove-if-not. Một chút của một chút, nhưng nó hoạt động.

Để xây dựng một chút, bạn cần

(require 'cl-lib) 

để có được chức năng này. Có một bí danh cho nó, được gọi là remove-if-not, nhưng Tôi không muốn sử dụng nó, vì có vẻ như tôi đang sử dụng remove-if-not từ cl.

Thực tiễn tốt là bao gồm tiền tố, không làm using namespace std trong C++, nhưng mỗi lần nói std::cout.

+1

Trong Emacs 23, có vẻ như là một 'remove-if' và' remove-if-not' không nằm trong gói tương thích cl. – Vatine

+0

@Vatine Emacs 24 có 'remove-if' và' remove-if-not' quá, bạn nên đăng nó như là câu trả lời vì chúng được xây dựng. – jcubic

+0

@Vatine, @jbubic: 'remove-if-not' trong Emacs 23 là một phần của các tính năng tương thích CL của nó, nó được định nghĩa trong 'cl-seq.el'. Nó luôn luôn có sẵn mà không cần phải "yêu cầu" bất cứ điều gì, mặc dù, ít nhất là trong kinh nghiệm của tôi. Có thể trong các phiên bản Emacs cũ hơn, 'cl-seq.el' không được tải theo cấu hình mặc định? –

11

Thư viện dash.el của bên thứ ba cung cấp chức năng -filter thay thế cho cl-remove-if-not.

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

;; => (2 4 6 8) 
+1

dash.el thực sự là một thư viện phải có để lập trình Emps Emacs nghiêm trọng :) – lunaryorn

Các vấn đề liên quan