Emacs Lisp是否有类似Python或JavaScript中的高阶函数filter
的等效函数?
(filter-equivalent (lambda (n) (= (% n 2) 0)) '(1 2 3 4 5 6 7 8))
==> (2 4 6 8)
Emacs Lisp是否有类似Python或JavaScript中的高阶函数filter
的等效函数?
(filter-equivalent (lambda (n) (= (% n 2) 0)) '(1 2 3 4 5 6 7 8))
==> (2 4 6 8)
这就是 cl-remove-if-not
。虽然有点拗口,但它很有效。
稍微解释一下,你需要
(require 'cl-lib)
为了获得这个功能。有一个别名叫做remove-if-not
,但我不太喜欢使用它,因为看起来可能像我正在使用cl
中的remove-if-not
。using namespace std
,每次都使用std::cout
。remove-if
和remove-if-not
。 - Vatineremove-if
和remove-if-not
,你应该将其发布为答案,因为它们是内置的。 - jcubicremove-if-not
是其 CL 兼容性功能的一部分,它在 cl-seq.el
中定义。它始终可用,无需任何 require
,至少在我的经验中是这样的。也许在旧版本的 Emacs 中,默认配置没有加载 cl-seq.el
? - Rördcl-lib
。 - abo-abo第三方dash.el库提供了一个-filter
函数,作为cl-remove-if-not
的替代选项。
(-filter 'evenp '(1 2 3 4 5 6 7 8))
;; => (2 4 6 8)