gpt4 book ai didi

clojure - 为什么不以 def 形式破坏?

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:04 25 4
gpt4 key购买 nike

let 形式(这里是 Clojure)中,我可以做类似的事情

(let [[u s v] (svd A)] 
(do-something-with u v))

其中 svd 返回长度为三的列表。这是一种非常自然的事情,所以我们为什么不这样做

(def [u s v] (svd A))

及其各种概括作为 def 形式的默认行为?我看不出这会如何干扰 def 已经在做的事情。了解 Lisp 或 Clojure 的 Zen of Lisp 或 Clojure 的人可以解释为什么 def 不支持像 let 一样强大的绑定(bind)(解构)吗?

最佳答案

def 是编译器级别的一种特殊形式:它生成一个 Var。在解构可用之前,def 必须可用且可用。您会看到与 let* 类似的东西,它是一种不支持解构的编译器原语:然后在 clojure/core.clj 几千行之后,该语言终于强大到足以提供一个let 的解构版本,作为 let* 之上的宏。

如果需要,您可以编写一个宏(例如,def+)来为您执行此操作。我个人认为它有点恶心并且不会使用它,但是使用 Lisp 意味着开始使用适合您个人的语言。

关于clojure - 为什么不以 def 形式破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8197329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com