在常见的lisp库中苦苦挣扎

时间:2010-09-28 21:06:42

标签: lisp scheme common-lisp

我已经学会了计划并很快掌握了很多计划,然后在其中做了一个项目就好了。字面上花了我几天才完成。我现在正在尝试学习常见的口齿不清以获得对此的感觉,而现在我真的在努力学习asdf。如何将它与库一起使用似乎是常识,但我感到困惑。我想这是因为大多数lisp程序是在repl中制作并运行的,因为一切正常。当我尝试将它编译成可执行文件时,我正在失去我的位置。

是否有人可以给我任何建议或指向我的教程?我真的希望能够创建一个可执行文件给人们,而不必解释如何安装sbcl和(require)然后运行它。我只是想学习在lisp中做一些我无法用方案做的事情。

我想我可以使用方案并使用ffi来使c库工作,但我没有使用c的经验。我只是一个网络开发人员,出于个人原因学习lisp。当然,学习一些c和ffi可能不会像哈哈那样长.ha 感谢

2 个答案:

答案 0 :(得分:7)

  

我真的希望能够成功   可执行文件给予没有的人   不得不解释如何安装sbcl   并且(要求)它然后运行它。

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

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

例如,在SBCL中,您将使用sb-ext:save-lisp-and-die; CCL有ccl:save-application。您必须查看实现的文档,以了解如何执行此操作。

我目前没有SBCL,但这个最小的例子应该可以使用(未​​经测试):

(defun do-it () (format t "hello world~%"))
(sb-ext:save-lisp-and-die "hello" :toplevel #'do-it :executable t)

这是一个使用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

这些可执行映像的大小可能相当大,除非你的实现提供类似树形摇动器的东西,但我认为现在这不应该是一个问题。

您可以在another SO question about this topic中找到clisp的详细示例。

ASDF Documentation

答案 1 :(得分:0)

这不是你要求的,但它可能会有所帮助。

我也无法让ASDF工作得很好。有人用clbuild指出了我,这是对类似问题略有不同的方法。到目前为止,它对我来说效果很好。