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

Gre*_*ory 2 macros scheme haskell functional-programming

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

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

是否与Haskell纯粹的事实有关,所以改变功能代码要困难得多?

它与懒惰评估有关吗?

lef*_*out 7

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

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

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

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

  • 当然我同意懒惰和纯洁并不重要,并且Scheme的简单语法确实很重要.我不知道这与静态或编译有什么关系:宏通常不会在运行时生成代码. (6认同)