2013-09-25 11 views
10

Emacs Lispに高次関数filterと同等のものがありますか? PythonやJavascriptのような機能。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と呼ばれるエイリアスがありますが、 remove-if-notからclを使用しているように見えるかもしれません。

using namespace stdをC++で実行しないでください。接頭辞は だが、毎回std::coutと言っておくことをお勧めします。

+1

Emacs 23では、cl互換パッケージにはない 'remove-if'と' remove-if-not'があるようです。 – Vatine

+0

@Vatine Emacs 24には 'remove-if'と' remove-if-not'もありますので、それらが組み込まれているので答えとして投稿してください。 – jcubic

+0

@Vatine、@jububic:Emacsの 'remove-if-not' 23はCL互換機能の一部であり、 'cl-seq.el'で定義されています。しかし、少なくとも私の経験では、何かを「必要とする」ことなくいつでも利用可能です。古いEmacsのバージョンでは、 'cl-seq.el'がデフォルトの設定で読み込まれなかったのでしょうか? –

11

第三者のdash.elライブラリは、cl-remove-if-notの代わりに-filterの機能を提供します。

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

;; => (2 4 6 8) 
[Lispのフィルタアウトリスト一致しない述語の結果(の
+1

dash.elは本当にEmacs Lispプログラミングのための必須ライブラリです:) – lunaryorn