标签: quicklisp

当CL程序作为shell脚本调用时如何使用quicklisp?

我目前在Common Lisp中有一个小程序,我希望它作为shell脚本运行.我正在使用SBCL并且完全没问题,所以我宁愿留在这个平台上.:)

我知道这个--script选项,除了(ql:quickload)形式,它完美无缺.

我的程序使用CL-FAD,它加载通过ql:quickload(我想我应该提到它是来自quicklisp的包加载函数).当脚本运行到评估时

(ql:quickload :cl-fad)
Run Code Online (Sandbox Code Playgroud)

形式,它打破了下一个错误:

package "QL" not found
Run Code Online (Sandbox Code Playgroud)

程序打包在单个源文件中,该文件具有以下标题:

(defpackage :my-package
  (:use :common-lisp)
  (:export :my-main-method))
Run Code Online (Sandbox Code Playgroud)

它是简单的自动化可执行文件,因此我决定(可能是错误的)不要编写任何ASDF系统.它导出单个函数,应该在没有任何参数的情况下运行.

对于这个程序,我目前正在尝试编写启动器脚本,这就是我正在盯着的:

#!/usr/bin/sbcl --script
(load "my-program.lisp")
(in-package :my-package)
(my-main-method)
Run Code Online (Sandbox Code Playgroud)

这三行(不包括shebang)是我想要自动化的.正如我在文档中看到的那样,使用这个shebang的脚本可以被称为简单./script.lisp,并且它确实这样做...具有之前描述的错误.

我需要在启动器中添加什么:cl-fad才能正确加载?文档说明使用--script选项SBCL不加载任何init文件,所以我真的需要复制行

#-quicklisp
(let ((quicklisp-init (merge-pathnames "systems/quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))
Run Code Online (Sandbox Code Playgroud)

(ql:add-to-init-file添加到.sbclrc),到我的启动器脚本?也许我的程序设置有一些深层的架构缺陷?

是的,当我输入我尝试在sbcl本身的REPL中自动化的行时,程序按预期运行.

shell automation sbcl common-lisp quicklisp

15
推荐指数
2
解决办法
3015
查看次数

如何使用quicklisp安装的软件包?

我使用quicklisp安装了CL-PNG软件包.

(ql:quicklisp 'png)
Run Code Online (Sandbox Code Playgroud)

现在我想定义自己的包,这取决于CL-PNG包.像这样:

(defpackage :FOO
  (:use :CL :PNG)
  (:export :BAR))
Run Code Online (Sandbox Code Playgroud)

编译时我收到此错误:

The name "PNG" does not designate any package.
   [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]
Run Code Online (Sandbox Code Playgroud)

(require :PNG)在编译我的包之前,我似乎必须调用REPL.

如何在不手动调用requireREPL的情况下为编译器提供CL-PNG包,我该怎么办?

更新:我正在使用SBCL.

lisp packages sbcl common-lisp quicklisp

12
推荐指数
1
解决办法
3597
查看次数

是否有简单的方法来安装Lisp库,如ruby gem(Ruby)或easy_install(Python)?

我发现easy_install对于使用Python进行编程非常有用,就像使用Ruby的rubygem一样.

Lisp有类似的功能吗?我知道有很多Lisp实现(clisp,sbcl,clozure cl ...),但我只是想知道Lispers在需要查找和使用Lisp库函数时会做什么.

lisp common-lisp quicklisp

11
推荐指数
1
解决办法
511
查看次数

在Quicklisp中禁止"加载"输出

有没有办法让quicklisp加载库而不发送:

To load "drakma":
  Load 1 ASDF system:
    drakma
; Loading "drakma"
Run Code Online (Sandbox Code Playgroud)

标准出来?我已经尝试添加:verbose nil:explain nil参数ql:quickload(这是我现在加载库的方式),但似乎这些是默认值 - 打开它们只会增加输出量.

谢谢你的帮助!

common-lisp quicklisp

11
推荐指数
3
解决办法
951
查看次数

Quicklisp QUICKLOAD应该放在哪里?无处?

假设我在net.aserve和之上构建了一个应用程序bordeaux-threads.我的包声明可能如下所示:

(defpackage :my-package
  (:use :cl :net.aserve :bordeaux-threads)
  (:export …))
Run Code Online (Sandbox Code Playgroud)

我使用Quicklisp,所以(ql:quickload "aserve") (ql:quickload "bordeaux-threads")在编译我的包之前我在SLIME中运行,一切都很好.

当然,明天我再次启动SLIME,我必须记得QUICKLOAD在编译之前发出s,否则我就麻烦了.

可以把类似的东西

(eval-when (:compile-toplevel)
  (ql:quickload "aserve")
  (ql:quickload "bordeaux-threads"))
Run Code Online (Sandbox Code Playgroud)

在我的软件包的顶部 - 这是我为开发所做的 - 但我觉得强制一个包管理器对用户来说不是一个好主意.

还有更好的选择吗?

lisp common-lisp allegro-cl quicklisp

9
推荐指数
2
解决办法
3352
查看次数

对SBCL中的``ql:quickload``和可执行脚本感到困惑

我一直在尝试在我的可执行脚本中使用Quicklisp包.一个(平凡的)工作示例是:

#!/usr/bin/sbcl --script

(eval-when (:compile-toplevel :load-toplevel :execute)
  (ql:quickload "lisp-unit")) ;as explained by another question

(defpackage :test
  (:use :cl :lisp-unit))

(format t "This is a test.")
Run Code Online (Sandbox Code Playgroud)

chmod使用此代码(调用test.lisp)的文件后,我尝试执行它.但是,我收到以下错误消息:

Unhandled SB-C::INPUT-ERROR-IN-LOAD in thread #<SB-THREAD:THREAD
                                            "main thread" RUNNING
                                             {1002C16923}>:
  READ error during LOAD:

    Package QL does not exist.

      Line: 4, Column: 15, File-Position: 95

      Stream: #<SB-SYS:FD-STREAM
            for "file /home/koz/Documents/Programming/CL/trees/test.lisp"
            {1002C19A93}>

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1002C16923}>
0: ((LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX))
1: (SB-IMPL::CALL-WITH-SANE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX) {1002C2498B}>) …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp quicklisp

9
推荐指数
1
解决办法
4928
查看次数

如何将本地项目添加到由quicklisp配置的asdf

我想通过asdf向已知项目添加一个本地项目,但由于*central-registry*aslis由quicklisp 安装和配置,并且指向"#P/home/user/quicklisp/quicklisp /",其中包含.lisp文件.我不知道该怎么做,因为手册解释了目录中的符号链接会做到这一点,但我不想在quicklisp里乱搞.(它确实可以作为修补程序使用!)

因此:如何将本地项目添加到由quicklisp安装和配置的asdf(NOT QUICKLISP)?

common-lisp asdf quicklisp

8
推荐指数
2
解决办法
4188
查看次数

如何将buildapp与quicklisp结合使用

我想使用buildapp来生成curl-lisp可执行文件作为示例:

buildapp --output lisp-curl --asdf-path ~/src/clbuild/systems/ \
    --load-system drakma \
    --eval '(defun main (args) (write-string (drakma:http-request (second args))))' \
    --entry main
Run Code Online (Sandbox Code Playgroud)

这绝对不会起作用,因为我没有路径"〜/ src/clbuild/systems /",因为我使用quicklisp我的系统应该在"〜/ quicklisp/dists/quicklisp/software",但是当我执行时:

buildapp --output lisp-curl  \
         --asdf-path ~/quicklisp/dists/quicklisp/software      \
         --load-system drakma     \
         --eval '(defun main (args) (write-string (drakma:http-request (second args))))'   \
         --entry main

; file: /home/simkoc/dumper-YKYna1b3.lisp
; in: DEFUN DUMP-FILE-DEBUGGER
;     (QUIT :UNIX-STATUS 111)
; 
; caught STYLE-WARNING:
;   SB-EXT:QUIT has been deprecated as of SBCL 1.0.56.55. Use SB-EXT:EXIT or
;   SB-THREAD:ABORT-THREAD instead.
;   
; …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp quicklisp

8
推荐指数
1
解决办法
1292
查看次数

如何使用SBCL正确保存Common Lisp图像?

如果我想创建一个程序的Lisp图像,我该如何正确地完成它?有先决条件吗?它不和QUICKLISP很好地搭配吗?

现在,如果我启动SBCL(只预装了QUICKLISP)并保存图像:

(save-lisp-and-die "core")
Run Code Online (Sandbox Code Playgroud)

然后尝试使用此图像再次启动SBCL

sbcl --core core
Run Code Online (Sandbox Code Playgroud)

然后尝试做:

(ql:quickload :cl-yaclyaml)
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

To load "cl-yaclyaml":
  Load 1 ASDF system:
    cl-yaclyaml
; Loading "cl-yaclyaml"
.......
debugger invoked on a SB-INT:EXTENSION-FAILURE in thread
#<THREAD "main thread" RUNNING {100322C613}>:
  Don't know how to REQUIRE sb-sprof.
See also:
  The SBCL Manual, Variable *MODULE-PROVIDER-FUNCTIONS*
  The SBCL Manual, Function REQUIRE

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RETRY                        ] Retry completing load for …
Run Code Online (Sandbox Code Playgroud)

dump sbcl common-lisp quicklisp

8
推荐指数
1
解决办法
1551
查看次数

有没有办法在Mac OS上使用动态FFI支持编译CLISP?

我在Mac OS X 10.6.4上使用clisp 2.48(2009-07-28).我用'sudo port install clisp'下载了clisp.

安装快速lisp后,我安装了一些软件包,其中大多数都没问题.

但是,当我尝试安装"sqlite"时,我收到以下错误.

[1]> (ql:quickload "sqlite")
To load "sqlite":
  Load 1 ASDF system:
    sqlite
; Loading "sqlite"
[package cffi-sys]
*** - CFFI requires CLISP compiled with dynamic FFI support.

它说我的安装了mac port的clisp没有FFI支持.

有没有办法在Mac OS X上使用动态FFI支持编译CLISP?

clisp common-lisp macports quicklisp

7
推荐指数
1
解决办法
1231
查看次数

标签 统计

common-lisp ×10

quicklisp ×10

sbcl ×5

lisp ×3

allegro-cl ×1

asdf ×1

automation ×1

clisp ×1

dump ×1

macports ×1

packages ×1

shell ×1