gpt4 book ai didi

lisp - 使用 def 和 defn 而不是仅仅定义背后的基本原理是什么?

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

在Scheme中,我们只是对所有的定义进行了define,为什么Clojure和Lisp对不同的声明使用不同的关键字?

最佳答案

defndefmacrodefstruct等只是定义其对应结构的宏,无需编写样板代码。例如,defn 使编写函数变得更容易,因为您不再需要担心放入 lambda 项(您可以在 Scheme 中这样做,只需在定义的名称后立即将参数括起来):

方案:

(define hello
(lambda (name)
(display (string-append "hello, " name))))


(define (hello name)
(display (string-append "hello, " name)))

Clojure:

(def hello
(fn [name]
(println (str "hello, " name))))

(defn hello [name]
(println (str "hello, " name)))

您可以将 defn 视为 def + fn 的助记符设备。这样的快捷方式可以减少样板代码,并使代码总体上更易于阅读。我正在教某人如何编写 Scheme,我让他们使用长格式,以便他们始终牢记语言在做什么(并且在他们最终开始时会更加欣赏节省工作的宏使用它们)。

definedef 形式为后面的某些表达式命名。当在 definedef 表达式中使用时,lambdafn 形式为名称提供一组绑定(bind)。这就是事情开始变得更加复杂的地方,使用宏表单可以让您保持理智并避免打字无聊。

关于lisp - 使用 def 和 defn 而不是仅仅定义背后的基本原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1163048/

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