gpt4 book ai didi

emacs - Common Lisp 有一些功能。我怎样才能在 elisp 中写一些或任何东西?

转载 作者:行者123 更新时间:2023-12-05 09:24:38 27 4
gpt4 key购买 nike

any 函数将对序列的元素评估函数(或谓词),如果谓词对序列的任何元素返回 true,则返回 true。因此

(any `stringp `(42 t "yes" nil))

.. 将返回非零,并且

(any `stringp `(42 t nil 89))

...将返回零。

我认为 CL 模块中有一个 some 函数,但我不想使用它。

使用 mapc 编写简单的实现很容易:

(defun my-any (predicate sequence)
"Return true if PREDICATE is true of any element of SEQUENCE.
If so, return the first non-nil value returned by PREDICATE.
"
(let (result)
(mapc '(lambda (elt)
(or result
(setq result (funcall predicate elt))))
sequence)
result))

但是有人可以对此提供优化或改进吗?是否有更快、更清洁或更惯用的 elisp 方法来执行此操作?特别是在第一个触发时停止映射序列的最佳方法是什么?我可以“展开”mapc,但这是最好的方法吗?

我想我可以使用 catch,但实际上成本可能比节省的要多。

提示?

最佳答案

(defun any (pred list)
(while (and list (not (funcall pred (car list))))
(pop list))
(car list))

关于emacs - Common Lisp 有一些功能。我怎样才能在 elisp 中写一些或任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com