使用 c 语言的 macro 操作,能够很简单的用 c 语言模拟 lisp 语法。
下面我们来定义 lisp.h 头文件
#ifndef LISP_H_OTE1HWPK
#define LISP_H_OTE1HWPK
#include <stdio.h>
#include <stdlib.h>
#define define(ret, name, args, block) \
ret name args { return block; }
#define if(expr, block1, block2) \
expr ? block1 : block2
#define eq(a, b) \
a == b
#define neq(a, b) \
a != b
#define sub(a, b) \
a - b
#define mul(a, b) \
a * b
#define add(a, b) \
a + b
#define div(a, b) \
a / b
#endif /* end of include guard: LISP_H_OTE1HWPK */
然后来用类似于 lisp 的语法编写一段求阶乘的代码:
define(int, factorial, (int n),
if(eq(n, 0),
1,
mul(n, factorial(sub(n, 1)))))
define(int, main, (void),
(printf("10! = %d\n", factorial(10)), EXIT_SUCCESS))
编写 Makefile:
CFLAGS = -Wall -include "lisp.h"
TARGET=factorial
all:
gcc -o $(TARGET) $(TARGET).c $(CFLAGS)
clean:
rm -f $(TARGET)
编译并运行:
liubang@venux-dev:~$ make
gcc -o factorial factorial.c -Wall -include "lisp.h"
liubang@venux-dev:~$ ./factorial
10! = 3628800
评论