与公共lisp库抗争

与公共lisp库抗争,lisp,scheme,common-lisp,Lisp,Scheme,Common Lisp,我已经学会了这个计划,很快就掌握了很多,然后在其中做了一个项目。我花了好几天才完成。我现在正试图学习CommonLisp来了解这一点,现在我正在努力学习asdf。如何在图书馆中使用它似乎是常识,但我感到困惑。我想这是因为大多数lisp程序都是在repl中生成和运行的,因为所有这些都可以正常工作。当我试图把它编译成一个可执行文件时,我失去了我的位置 有没有人可以给我一些建议或者给我一个指南?我真的希望能够制作一个可执行文件,提供给人们,而不必解释如何安装sbcl和(要求)它,然后运行它。我只是想学

我已经学会了这个计划,很快就掌握了很多,然后在其中做了一个项目。我花了好几天才完成。我现在正试图学习CommonLisp来了解这一点,现在我正在努力学习asdf。如何在图书馆中使用它似乎是常识,但我感到困惑。我想这是因为大多数lisp程序都是在repl中生成和运行的,因为所有这些都可以正常工作。当我试图把它编译成一个可执行文件时,我失去了我的位置

有没有人可以给我一些建议或者给我一个指南?我真的希望能够制作一个可执行文件,提供给人们,而不必解释如何安装sbcl和(要求)它,然后运行它。我只是想学习在lisp中做一些我无法用scheme做的实质性工作

我想我可以使用scheme和ffi让c库工作,但我没有使用c的经验。我只是一名网络开发人员,出于个人原因学习lisp。当然,学习一些c语言和外国金融机构可能不会花这么长时间,哈哈。

谢谢

这并不是你想要的,但可能会有所帮助

我也无法让ASDF工作得很好。相反,有人把我指了指,这与解决类似问题的方法略有不同。到目前为止,它对我很有效

我真的很想做一个 可执行的,可执行的 必须解释如何安装sbcl 然后运行它

生成“独立”可执行文件不需要ASDF。大多数实现都提供了保存可执行映像的方法,但标准中没有提到如何保存(以及是否提供)

通常,您会将代码加载到正在运行的映像中,然后“转储”该映像

例如,在SBCL中,您将使用;CCL有。您必须查看您的实现文档,以了解如何实现它

目前我这里没有SBCL,但这个最小的示例应该有效(未经测试):

这是一个使用CCL的工作示例:

Welcome to Clozure Common Lisp Version 1.6-dev-r14287M-trunk  (LinuxX8632)!
? (defun do-it () (format t "hello world~%"))
DO-IT
? (ccl:save-application "hello" :toplevel-function #'do-it :prepend-kernel t)
[danlei@susi ~/build/ccl]% ./hello
hello world
这些可执行映像的大小可能相当大,除非您的实现提供了类似于摇树器的东西,但我不认为这在当今应该是一个问题

您可以在中找到clisp的详细示例


我很想帮助您,我正在comp.lang.lisp上回复您的问题。我的反应还不够快吗?不,哈哈。我感觉我像是在抓住你的生命线,我担心你会很忙,我会占用你太多的时间。所以我在这里发帖子是想看看是否还有其他人可以加入到comp.lang.lisp.clbuild中,而这些人可能不在comp.lang.lisp.clbuild使用ASDF加载所有内容。你是说安装asdf吗?这回答了你的问题吗?我不太确定我是否理解正确,因为你说过,一切都是从REPL开始的。如果您可以在REPL中加载lib,那么我上面描述的就是获取独立可执行文件的方法,然后您可以将其分发给您的用户。如果希望它们具有普通的REPL,但图像中已经存在库,只需省略:toplevel(-function)关键字参数即可。
Welcome to Clozure Common Lisp Version 1.6-dev-r14287M-trunk  (LinuxX8632)!
? (defun do-it () (format t "hello world~%"))
DO-IT
? (ccl:save-application "hello" :toplevel-function #'do-it :prepend-kernel t)
[danlei@susi ~/build/ccl]% ./hello
hello world