list - 方案相当于元组拆包是什么?

标签 list scheme racket iterable-unpacking

在Python中,我可以做这样的事情:

t = (1, 2)
a, b = t

...a 将是 1,b 将是 2。假设我在 Scheme 中有一个列表 '(1 2)。有什么方法可以用 let 做类似的事情吗?如果有影响的话,我会使用 Racket。

最佳答案

在 Racket 中你可以使用match ,

(define t (list 1 2))
(match [(list a b) (+ a b)])

以及相关的东西,例如 match-define :

(match-define (list a b) (list 1 2))

match-let

(match-let ([(list a b) t]) (+ a b))

这适用于列表、向量、结构等。对于多个值,您可以使用 define-values :

(define (t) (values 1 2))
(define-values (a b) (t))

let-values。但请注意,我无法将 t 定义为“元组”,因为在(大多数)方案实现中多个值不是第一类值。

关于list - 方案相当于元组拆包是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4220515/

相关文章:

Python:从不考虑顺序的 "set of tuples"生成 "list of tuples"

Java/Android 将列表项添加到其他列表

python - 如何在水平列表中显示Python函数的输出,以便我们可以重用它?

scheme - 为什么 (* 1.1 1.1) 在 Racket 中是 1.2100000000000002?

c# - 带委托(delegate)的 Linq 查询不更新变量

scheme - 在 DrRacket IDE 中创建可执行文件时使用 .ico 文件作为图标

list - 可以让 R5RS 代码与 SchemeUnit 一起工作吗?

racket - 下面的 Racket 代码有什么错误?

html - 在 Racket 中生成 HTML

scheme - 为 Dr.Scheme 寻找 SimplyScheme 成语