在Clojure中,`&;是什么意思在函数/宏签名中是什么意思?

在Clojure中,`&;是什么意思在函数/宏签名中是什么意思?,clojure,macros,lisp,Clojure,Macros,Lisp,我在Clojure函数签名中看到了&的用法,如下所示(): 这是: (doseq seq-exprs & body) 这是否意味着函数/宏可以接受列表作为变量?我还发现,*通常用于表示可以接受多个参数,如下所示: (do exprs*) 有人知道函数/宏签名中&和*之间的区别吗?是否有任何文档来解释此语法?这意味着在符号and之后可以有多个参数,它们将被函数视为一个seq。例如: (defn g [a & b] (println a b)) 如果你打电话: (g 1

我在Clojure函数签名中看到了
&
的用法,如下所示():

这是:

(doseq seq-exprs & body)
这是否意味着函数/宏可以接受列表作为变量?我还发现,
*
通常用于表示可以接受多个参数,如下所示:

(do exprs*)

有人知道函数/宏签名中
&
*
之间的区别吗?是否有任何文档来解释此语法?

这意味着在符号and之后可以有多个参数,它们将被函数视为一个seq。例如:

(defn g [a & b]
  (println a b))
如果你打电话:

 (g 1 2 3 4)
它将打印出
1(2 3 4)
(a是1,b是包含2、3和4的序列)

在clojure(
let
fn
loop
,以及它们的后代)中,您可以将绑定向量的其余部分绑定到带有尾随
的序列。比如说,

(let [[a b & xs] (range 5)] xs) ;(2 3 4)
*
&
的其他用法是记录参数列表结构的约定

(let [[a b & xs] (range 5)] xs) ;(2 3 4)