在Clojure中,`&;是什么意思在函数/宏签名中是什么意思?
我在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
&
的用法,如下所示():
这是:
(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)