gpt4 book ai didi

function - 为什么要做特殊形式?

转载 作者:行者123 更新时间:2023-12-02 08:02:29 25 4
gpt4 key购买 nike

在 Clojure 中,为什么 do 是一种特殊形式,而不是这样实现的函数?

(defn do [& exprs]
(last exprs))

最佳答案

基本顺序执行语义

fn(好吧,fn*)实际上重用了 do 背后的逻辑,就像其他带有主体的形式一样 – let* letfn*尝试。由于其中有几个,因此让它们重用基本的“按顺序评估表达式”逻辑是有意义的;由于这本身对于更复杂的特殊形式上下文之外的用户代码很有用,因此将其公开为 do 是有意义的。

如果 fn* 是基本的特殊形式,则顺序计算表达式将涉及进行函数调用 - 对于这种低级设施来说,这种开销是 Not Acceptable 。

(另一方面,用将其主体包装在隐式 do 中的宏替换其他特殊形式不会引入任何开销。但是,在 Clojure 编译器的上下文中,这也不会是一个巨大的胜利——至少在这一点上它已经相当干燥了。)

顶级do

此外,编译器会特别对待顶级 do

(do
(foo)
(bar))

在顶层(并且仅在顶层)相当于

(foo)
(bar)

——即单独写出的各个表达式。这允许宏输出(相当于代码)多个顶级表达式。

以这种方式解释对某些特殊函数的顶级调用并非不可能,但为此目的使用特殊形式要清晰得多。

关于function - 为什么要做特殊形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375196/

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