使用C宏创建lisp评估程序

时间:2014-03-08 16:00:48

标签: c macros scheme lisp

我正在阅读关于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)))

当然这只是个玩笑,但是有机会使用宏系统制作完整的方案评估器吗?

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的东西来在编译时创建函数。但是,它可能会使用大量内存进行慢速编译。