python - 元组解包类似于 Python,但在 Common Lisp 中

标签 python list lisp common-lisp iterable-unpacking

在 Common Lisp 中,有没有一种方法可以将列表的值分配给符号列表,类似于在 Python 中将元组的值分配给变量的方式?

x, y, z = (1, 2, 3)

有点像

(setq '(n p) '(1 2))

其中 np 现在分别等于 12。以上只是我在脑海中思考的方式,但它不起作用。我尝试按如下方式使用应用:

(apply setq '('(n p) '(1 2)))

我是 Lisp 的新手,所以如果这是显而易见的事情,尽量不要太苛刻,请给我指明正确的方向!谢谢。

PS:我看过关于在 Scheme 中执行此操作的帖子和类似的关于 Common Lisp 中的元组扩展的帖子,但这些对回答我的问题不是很有帮助 1) 因为我没有使用 Scheme,以及 2 ) 因为排名最高的答案只是单词 apply

最佳答案

使用DESTRUCTURING-BIND ,它可以做的不仅仅是元组拆包。比如关键字赋值和可选参数等。实际上,您可以使用函数的参数列表做任何事情。

但是如果您实际上没有要解构的列表,并且想一次设置一堆变量,请使用 PSETF :

(psetf n 1
       p 2)

You can also use SETF, but PSETF is a closer analog of tuple assignment: it works for swapping/permuting values, for instance.

# Python
n, p = p, n
x, y, z = z, x, y
;; Lisp
(psetf n p
       p n)
(psetf x z
       y x
       z y)

实际上,您可能可以通过普通的 LET 逃脱。

此外,不要为任何事情而烦扰 SETQ。使用 SETF/PSETF,因为它们更好,而且是执行某些类型作业的唯一方法。

关于python - 元组解包类似于 Python,但在 Common Lisp 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6012688/

相关文章:

将 Lambda 应用于返回另一个列表的列表的 Java 8 惯用方法?

python - 如何准备一个包含整数、 float 和字符串的列表?

clojure - repl/source 函数在 Clojure 中不起作用

optimization - 如何优化我的递归 Lisp 函数

python - 了解 OpenGL 中的光与 Material 属性

python - 自定义 buildbot 步骤类 - 如何使用 remoteCommand/remoteShellCommand 制作自己的步骤类

python - 将对象列表转换为 Json 数组

java - 如何创建 DRYer 构造函数

recursion - 递归函数不起作用 '"程序车中的参数类型错误”

python - scikit-learn 随机森林的输入