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意味着使用适合您个人的语言.
归档时间: |
|
查看次数: |
944 次 |
最近记录: |