如何在 Elisp 中使用“and”和“seq-reduce”?

问题描述 投票:0回答:1

我正在尝试写这样的东西:

(setq l '(nil t nil nil))
(seq-reduce 'and l t)

我收到此错误:

无效功能:和

经过一番谷歌搜索后,我的理解是,这是因为

and
special form
。 使这项工作有效的好方法是什么?有没有相当于
and
的函数?有没有办法从特殊形式中生成函数?我找不到任何关于此的文档。我尝试编写一个函数来执行
and
的功能,但这似乎有点过分了。

elisp special-form
1个回答
0
投票

seq-reduce
函数使用
funcall
来调用其函数参数,并且
funcall
文档中所示
,像
and
这样的特殊形式不能传递给它;调用
(funcall 'and t nil)
会导致
Invalid function: #<subr and>
错误。

您可以改为在

and
中拨打
lambda

(let ((l '(nil t nil nil)))
  (seq-reduce (lambda (acc v) (and acc v)) l t))
© www.soinside.com 2019 - 2024. All rights reserved.