【发布时间】:2020-01-31 11:34:57
【问题描述】:
我试图从一个方案函数开始生成 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 等标准方案库中的函数应与某个目标文件链接。
编辑:
我的目的是了解专业翻译人员使用的算法。
【问题讨论】:
-
f看起来像是阶乘函数的实现。手动实现 C 版本应该很容易,可以递归或迭代实现。但除非您只处理阶乘适合 64 位的小数,否则您可能需要使用 bignum 库,例如 GNU MP。 -
@alinsoar 在 C 中实现尾调用递归很简单——使用
goto。 -
阅读 Queinnec 的书Lisp in Small Pieces christian.queinnec.org ;几百页来解释你的要求
-
不,但Programming Language Pragmatics 和Dragon book 也值得一读。然后,一本关于Denotational Semantics,当然还有R5RS的书
-
还可以查看s48.org