我正在阅读关于C宏系统的章节,发现我可以定义一些简单的类似lisp的评估器。
#define add(x,y) ((x)+(y))
#define mult(x,y) ((x)*(y))
#define sub(x,y) ((x)-(y))
#define eval(x) main(){printf("%d\n",(x));}
eval( mult (sub(10,2) , add(6,2)))
当然这只是个玩笑,但是有机会使用宏系统制作完整的方案评估器吗?
答案 0 :(得分:1)
这里有一个用宏实现的小型C子集。
要调用任何内容LISP
,您需要使用完全括号Polish prefix表示法。例如。在C中你会写5 + 5
而在LISP中你会写(+ 5 5)
。在C语言中,您可以编写10 + 3 + 6 - 1
,在Lisp中,您可以编写(- (+ 10 3 6) 1)
如果您对如何实施LISP语言感兴趣,可能会对Peter Michaux'Bootstrap Scheme感兴趣,然后尝试创建自己的语言。这是一个非常好的练习,教你LISP的精彩世界以及如何制作翻译/编译器(取决于你最终做的事情),你在LISP和你选择实现它的语言方面都会变得更好。
如果您不熟悉LISP语言,可能需要在开始之前学习一点LISP。我推荐Paul Grahams的文章The roots of LISP,如果你有时间,你可能想要完成由巫师自己完成的所有video lectures of SICP。对于更常见的Lisp方法,您可能会对Land of Lisp感兴趣。
答案 1 :(得分:1)
不,宏没有完成。另一方面,C ++模板是完整的,并且它是一种严格的函数式语言,但是可以用它来编写类似于lisp的东西来在编译时创建函数。但是,它可能会使用大量内存进行慢速编译。