我不确定我是否正确,但我很确定我正在寻找一个可以放入我的C ++程序的LISP解释器。
我想象的理想情况是一个函数或者其他东西,我可以传递包含LISP代码的字符串,文件或文件名,然后在其他部分使用LISP代码的输出。
按照(print (eval (read)))
的说法,我希望read
是我输入的内容,以及我可以从打印中解析的字符串。
答案 0 :(得分:10)
还有ECL(“Embeddable Common Lisp”)。它的优点是它提供了完整的Common Lisp标准。不幸的是,documentation with respect to embedding是......好吧......有点稀缺。
我自己从未使用它,所以我无法确切地说,这实际上是否很容易嵌入到您的应用程序中。恕我直言,Guile翻译将是一个合理的选择。
另一个可嵌入的Lisp是Rep,例如,Sawfish窗口管理器使用的扩展语言。它始于Emacs lisp克隆,但随着时间的推移变得不同,现在更接近于Scheme。
答案 1 :(得分:7)
如果您对Common Lisp感兴趣,那就是ECL。
来自FAQ:
2.1这种“嵌入”的东西是什么意思?
ECL是一个完整的承诺 Common-Lisp的实现 语言。但是,由于它的方式 实施后,实施即可 用作可扩展性语言 对于你自己的应用程序,很像 Guile适用于Scheme语言。 通过一组相当简单的函数, 你可以解析,编译和执行 Common-Lisp表单,并使用 外部函数接口(FFI),你 可以为Common-Lisp添加新功能 适合您的特定领域 语言。
和
2.2如何将ECL嵌入我的应用程序?
您必须使用ECL库 被称为libecl.so,libecl.dyld或 ecl.dll,取决于您的操作 系统(Unix,Mac OSX或Windows)。该 程序ecl-config将为您提供 你必须把旗帜传递给 C / C ++编译器和链接器, 使用ecl-config --cflags或 ecl-config --ldflags,分别。 关于你的节目,除了 链接到ECL库,你 必须调用正确的初始化 例程,cl_boot(),以便ECL设置 适当的内部结构。 在调用此例程后,您将 能够运行lisp代码并创建或 操纵lisp数据
答案 2 :(得分:3)
它不是Lisp,但是Guile是GNU跨平台脚本语言,并且是Scheme的解释器/编译器,它与Lisp非常接近。
答案 3 :(得分:1)
您可以使用GNU Guile,这是一个专门设计为可在C / C ++程序中轻松嵌入的Scheme解释器。
答案 4 :(得分:0)
尝试在此搜索下出现的任何内容:http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=embedded+lisp
事实证明很多人都想这样做。
答案 5 :(得分:0)
对于比Guile更可嵌入的东西,还有Chibi。
(我< 3 Guile BTW,所以这个答案并没有试图消除它 - 它只是提供另一个选择。)