lisp - 如何将特殊运算符应用于列表?

标签 lisp common-lisp

以下测试被拒绝:

CL-USER> (apply 'and '(t t t))
; Evaluation aborted on #<CCL::CALL-SPECIAL-OPERATOR-OR-MACRO #x3020013A1F3D>

我的第一个回复是试图将对特殊运算符的调用封装成一个lambda或者定义我自己的定义,但是当然不行。因为它会导致在 &rest 参数上为 'and 调用 apply 函数...您将如何解决这个问题?

最佳答案

改用函数 EVERY。

(every #'identity '(t t t))  -> t

您不能应用特殊运算符。

下一个解决方案:

(reduce (lambda (a b) (and a b))
        '(t t t)
        :initial-value t)

不要将 APPLY 用于列表操作。使用 REDUCE。

关于lisp - 如何将特殊运算符应用于列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10268842/

相关文章:

garbage-collection - 在函数式语言中使用大型数据结构时减少垃圾收集时间

emacs - 有没有人有用于缩进(和取消缩进)文本 block 的 Emacs 宏?

scheme - 从方案中的列表中打印对

lisp - 在 lisp 编程中返回一个值

lisp - lisp项目的结构

deployment - 使用 asdf 我可以加载仅提供以前制作的 FASL 的系统吗

xml - 为什么 Clojure 将 xml 文档表示为 HashMap ?

compilation - SBCL 的内联编译和 block 编译有什么区别?

java - ABCL 的解释器可以从 InputStream 加载 Lisp 源代码吗?

lisp - 如何复制使用 Lisp 闭包制作的计数器?