Gab*_*ell 15 lisp function clojure destructuring let
在一个let形式(Clojure在这里)我可以做类似的事情
(let [[u s v] (svd A)]
(do-something-with u v))
Run Code Online (Sandbox Code Playgroud)
其中svd返回长度为3的列表.这是一件很自然的事情,为什么我们不这样做呢?
(def [u s v] (svd A))
Run Code Online (Sandbox Code Playgroud)
及其各种概括作为def表单的默认行为?我不知道这会如何干扰def已经在做的事情.理解Lisp或Clojure的Zen的人能解释为什么def不支持绑定(与解构)一样强大let吗?
ama*_*loy 16
def是编译器级别的一种特殊形式:它构成一个Var.def必须在解构之前可用且可用.你看到类似的东西let*,一个不支持解构的编译器原语:然后在clojure/core.clj语言中的几千行最终足够强大以提供一个let带有解构的版本,作为一个宏在上面let*.
如果你愿意,你可以写一个宏(比方说def+),为你做这个.就个人而言,我认为它有点粗暴,不会使用它,但使用Lisp意味着使用适合您个人的语言.