我正在尝试写这样的东西:
(setq l '(nil t nil nil))
(seq-reduce 'and l t)
我收到此错误:
无效功能:和
经过一番谷歌搜索后,我的理解是,这是因为
and
是 special form
。
使这项工作有效的好方法是什么?有没有相当于and
的函数?有没有办法从特殊形式中生成函数?我找不到任何关于此的文档。我尝试编写一个函数来执行 and
的功能,但这似乎有点过分了。
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))