理解Clojure绑定语法

Pra*_*nde 5 binding jvm clojure

我学习的Clojure并阅读doseq时,我就注意到了类似下面的例子官方Clojure的文档doseq

(doseq [x [-1 0 1]
        y [1  2 3]] 
  (prn (* x y)))
Run Code Online (Sandbox Code Playgroud)

我的困惑在于表达[x [-1 0 1] y [1 2 3]].

这是否表示绑定表达?我尝试了一些谷歌搜索,但没有遇到任何描述这种形式的文档.

有人可以帮我理解Clojure中绑定表单的各种语法表示吗?

Art*_*ldt 8

这是一种" 绑定形式",它x依次将表达式中的值"绑定"到名称.因此,它通俗地表示将名称绑定到值的表达式.这是"解构绑定表单"的一部分,它将名称绑定到复合值的部分,例如列表或映射.

术语"绑定"而不是"设置"有助于传达它在做什么和在一些其他编程语言中设置变量之间的差异.该名称附加到doseq运行中表单所用时间的值,然后释放该名称以附加到另一个值.

Clojure提供任意结构绑定,在指定名称的语言中为大多数地方的值的任何部分赋予名称(绑定符号)

(doseq [[x1 x2] [[-1 -1] [0 0] [1 1]]
        y [1  2 3]] 
  (prn (* x1 x2 y)))
Run Code Online (Sandbox Code Playgroud)

也是一个绑定表达式,虽然它看起来稍微深入数据并将名称分配给第一个向量中的每个项目的两个值(并假设每个项目中有两个数字)我非常喜欢这个关于解构/绑定的教程