我想从一个方案函数开始生成C代码,但没有设法找到从方案到C的任何转换器。我想将该函数转换为C。
(define f
(lambda(n)
(if (= n 0) 1
(* n (f (- n 1))))))
(display (f 10))
(newline)
我尝试使用gambit(gsc),它会生成一个C文件,该文件看起来就像是要在某些解释器中加载的文件,而不是包含main
可以执行的功能的文件。
是否有一些应用程序可以生成可以直接执行的C代码?像标准方案库这样的功能display
应与某个目标文件链接。
编辑:
我的目的是了解专业翻译人员使用的算法。
有很多这样的翻译者,至少可以追溯到1980年代,我认为《 鸡》是一本不错的新书。
如果要使用:
make
(这对我来说在OSX上很轻松,在Linux上确实应该很轻松,尽管在Windows上可能更难);f.scm
。chicken f.scm
它进行编译会产生几百行难以理解的C语言;csc
创建它。如果您想做一些平凡的事情,例如,在C库中进行链接或与C语言中的Scheme代码进行通讯,则需要阅读大量的手册。
不知道要干什么,闻起来好像是XY问题。特别是:
这些都有很多例子。这些系统中的某些也可以编译为C,或通过C编译,但是一个不依赖于另一个。
最后,如果您想了解针对C的Scheme编译器如何工作(或针对任何语言(包括汇编器)的Scheme编译器如何工作),那么传统方法可能仍然是最佳的方法:找到一个编写良好的源,并且该源可用。阅读并修改其源代码。
谢谢。您可以提供一些关于Chicken内部的链接,以了解进行转换的算法吗?我希望我会读一些教我如何实现转换算法的文章。
@alinsoar:不是。我会怀疑它与其他任何编译器一样的繁琐:它恰好针对目标C。众所周知,C是“便携式汇编程序”:针对C的Scheme编译器就是一个例子。
这些解释器和编译器的内部结构在Christian Queinnec的书中进行了描述,但是在某些具体实现上同时阅读该书是很有趣的。
@alinsoar:否:该书中描述了一些用于编译和解释Scheme的特定示例技术:绝对没有任何理由使编译器需要遵循这些示例。例如,通过调用djinn来编译或解释Scheme程序是完全合法的。当然,这就是我一直这样做的方式。
@alinsoar:遗传算法是一个很好的例子:理论的早期历史中的某些技术可能仍然有用(尽管我不确定),但是今天人们在遗传算法中进行计算的技术广泛多样,并且从爱因斯坦知道的一切。无论如何,我已经完成了。