为什么向Haskell添加宏比为Scheme更难

时间:2018-01-09 15:49:21

标签: haskell functional-programming macros scheme

显然,向Haskell添加宏比使用.NET更难。

我对函数式编程中究竟是什么宏非常困惑,但从我在C中理解的是代码改变了"代码"在预处理时间,而不是程序本身。

是否与Haskell纯粹的事实有关,因此更改功能代码要困难得多?

是否与懒惰评估有关?

3 个答案:

答案 0 :(得分:7)

相反,它肯定与Haskell纯粹或懒惰无关。

宏在Haskell中不常见的主要原因是它是一种静态的编译语言,因此无论如何都不可能在运行时更改代码 。此外,它没有Lisp那样简单的语法,因此编写编译时宏总是有点麻烦。

http://hackage.haskell.org/package/template-haskell-2.12.0.0/docs/Language-Haskell-TH.html#t:Exp

Haskell的懒惰评估和强类型系统的抽象功能然而意味着在很多情况下你只需要需要宏,而Scheme程序员会使用它们。基本上,你可以抽象出计算本身的概念,这很像宏(如果你问我的话,那就更酷了)。

答案 1 :(得分:3)

This should help you。 Lisp语言的语法比其他语言简单得多,并且可以从语言直接访问解析器。

Clojure是一种lisp,既懒惰又可以处理纯代码,但仍然具有强大的Lisp宏。

答案 2 :(得分:1)

除了先前的答案之外,我会说Haskell和Scheme都是学术语言,具体意味着他们的工作是由研究人员及其特殊兴趣驱动的。对于这些语言,那些对宏感兴趣的人可能会倾向于使用语法系统(Scheme / Racket / Clojure)语言,其统一性(一切都是括号)使得宏定义变得更加容易。