【发布时间】:2015-04-13 17:57:18
【问题描述】:
我一直在尝试更多地思考抽象在函数式编程中的实际含义。我发现谈论我能理解的语言类型的最好的帖子是4 abstractions。然而,由于我是一个想要成为 Clojure 程序员的人,我想知道宏提供了什么样的抽象。似乎它们与 HOF 一起适合第 2 阶段,但同时它们不仅仅是 HOF。我发现第 3 阶段与表达式问题有关,是 Clojure 中的协议和多方法。所以我的问题是:
在 Lisp 语言中实现宏时,你会说你在抽象什么?
第 3 阶段和第 4 阶段在 Lisp 语言中是什么?
【问题讨论】:
-
很好的问题,但这更适合CSSE。我会说宏像第 1 阶段一样抽象,但在编译时。函数转换值,宏转换代码,而代码才是真正运行的代码。
-
我同意@TimothyBaldridge 的回答中我有资格评估的所有部分。我只想强调它们是使用 Lisp 重写 Lisp 源代码的方法。我认为宏不适合这四个抽象列表,因为它们在评估之前就起作用了。但是,宏可能被认为允许在这个意义上进行抽象:您可以使用宏来抽象几个不同函数共有的模式,从宏生成这些函数。这突出了为什么经常可以(并且应该)避免使用宏:HO 函数已经允许类似的东西。