lisp - 将列表传播到父级 sexp

标签 lisp scheme common-lisp

在任何 lisp 中是否有一种形式可以“传播”父 sexp 中的列表?喜欢:

(+ (spread '(1 2 3))) -> (+ 1 2 3)

最佳答案

有两种方法可以做到这一点。哪个更好取决于你最终想要什么。

通常,您可以在`(反引号)中使用,@,@ 之后的形式被评估以产生一个列表,然后将其拼接到模板中:

* `(+ ,@'(1 2 3))
(+ 1 2 3)

* (eval `(+ ,@'(1 2 3)))
6

或者,如果你只是想调用一个函数,它的参数被打包在一个列表中,使用 apply 函数会更方便:

* (apply #'+ '(1 2 3))
6

关于lisp - 将列表传播到父级 sexp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015885/

相关文章:

directory - 普通口齿不清 : creating a directory

lisp - Common Lisp 中的关联

haskell - Haskell 中的 I/O 是功能性的吗?

python - OpenGL/通用图形的最佳动态语言

lisp - 为什么将 "(null x)"替换为 "(null (cdr x))"会使此代码有效?

lisp - (cadr) 上的 Clisp "Program stack overflow. RESET"。如何?

lisp - 比较集合的函数;有助于提高效率

lisp - 如何在 Lisp 中找到二维数组中元素的列索引?

Racket 中的剩余参数,零或一个参数程序

list - 合并列表列表并循环返回