加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

是否有可能将类似Lisp的宏构建为命令式语言?

发布时间:2020-12-16 03:08:50 所属栏目:百科 来源:网络整理
导读:什么阻止像C这样的语言使用Lisp宏?在编译过程的什么时候,C放弃了操纵其代码树的能力? 而且,这是一个具体的解释与编译问题吗? 解决方法 语法问题 是的,你可以在命令式语言中使用类似Lisp的宏,因为Lisp支持命令式编程. C和Lisp中宏的主要区别在于操作源树是
什么阻止像C这样的语言使用Lisp宏?在编译过程的什么时候,C放弃了操纵其代码树的能力?

而且,这是一个具体的解释与编译问题吗?

解决方法

语法问题

是的,你可以在命令式语言中使用类似Lisp的宏,因为Lisp支持命令式编程. C和Lisp中宏的主要区别在于操作源树是多么容易:

>在C中,有声明,声明符,语句,表达式,块,一些不同的控制结构,标签等.新的语法结构可能需要更改解析器.宏将需要构建这些数据结构.
>在Lisp中,只有s表达式.新的语法结构不需要更改解析器.只有一个数据结构意味着用于构造语法树的API非常简单且易于记忆.

有些语言具有更复杂的语法(如C),但它们具有强大的宏功能(如Lisp).例如,Haskell.但是,在Haskell中编写宏的接口有点复杂,因为您需要用于创建和应用类型构造函数,声明,表达式等的函数,而不仅仅是列表的单个构造函数.

Haskell中宏中的模板的类型有注释:

[e| ... |] -- expression
[d| ... |] -- declaration
[t| ... |] -- type
[p| ... |] -- pattern

相比之下,Lisp宏中不需要那些字母e,d,t和p.这些在Haskell中是必需的,不是因为Haskell是强类型的,而是因为注释将解析器置于正确的状态,因此它可以使用适当的上下文解析内容.同样,Lisp语法只有一个上下文.

解释与编译

大多数语言可以同时解释,编译或同时解释. C可以是其中之一或两者. Lisp可以是??其中之一或两者.宏需要编译器在编译时执行代码,这可以通过解释宏代码,或者通过编译宏然后执行它来完成.因此,解释与编译实际上并不是一个问题(在几乎所有关于语言的讨论中都不是问题).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读