在elisp中,我可以像使用+一样将or作为一个函数进行求值。
(or nil 0 nil) ==> 0
(+ 1 0 1) ==> 2
我可以使用 apply 函数将 + 应用于一个列表
(apply '+ '(1 0 1)) ==> 2
所以,我认为或者会以相同的方式工作,但实际上并不是这样。
(apply 'or '(nil 0 nil)) ==> error: (invalid-function or)
我想这来自于一些内部魔法,用于实现短路求值。如何使用apply在列表上执行或操作?
附言:我的期望应用是查找命令行中是否有任何元素与特定模式匹配,因此我正在编写的部分非常重要:
(apply 'or (mapcar (lambda (x) (string-match-p "pattern" x)) command-line-args))
但它不起作用
some
在 "cl-extra.el" 中被定义 - 你可能需要先加载它。或者你可能正在使用一个较旧的 Emacs 版本。 - Ken(require 'cl)
。 - Eli Barzilay