我想收集在 ASDF 系统加载期间定义的所有包。
已经尝试过:
使用(list-all-packages)系统加载前后的区别,但不是很方便,因为有些系统可以作为我正在检查的系统的依赖项加载,我需要进行集合提取。
试图定义一个initialize-instance :after ((package package) &rest initargs)方法,但在defpackage评估表单时它不会被调用。
此外,当我快速加载 ASDF 系统时,我会看到[package dexador]它的输出。quicklisp 如何做到这一点?
在完成Peter Seibel的" Practical Common Lisp"一书时,我在理解如何与Emacs的SLIME和quicklisp一起处理Common Lisp包系统时遇到了一些困难.他提供的项目具有以下结构:
spam.lisp在包中com.gigamonkeys.spam,依赖于另外两个包,cl-ppcre和com.gigamonkeys.pathnames.pathnames.lisp 在包中 com.gigamonkeys.pathnamesspam.asd,它描述了com.gigamonkeys.spam包的依赖关系pathnames.asd,它描述了com.gigamonkeys.pathnames包的依赖关系我目前发现构建最终目标spam.lisp的唯一方法是:
pathnames.asd使用SLIME(C-x C-k)编译并加载文件com.gigamonkeys.pathname通过(asdf:operate 'asdf:load-op 'spam) 在REPL 键入来加载包cl-ppcre通过(ql:quickload "cl-ppcre")在REPL 键入来加载包spam.asd使用SLIME 编译并加载文件com.gigamonkeys.spam通过(asdf:operate 'asdf:load-op 'spam)在REPL 键入来加载包这似乎是使用单个文件中定义的函数所需的大量工作(spam.lisp) - 我必须做错事.是否有一些方法可以spam.lisp用更少的命令加载和递归地加载它的依赖项?
我已经在一些Lisp源文件中开发了一些Common Lisp函数,我希望这些函数可以轻松地用于我编写的其他函数,或者如果我认为它们对其他人有用,则可以在github上使用.现在,我刚刚将它们放在一些预先定义的文件夹中并使用(require "/path/to/my/modules/module.lisp").
我想要了解什么是正确的(规范的Lisp)方法来定义模块的Lisp库.问题的第二部分是如何使用它们(我是否定义了它们,或者我是否从其他人那里获得了它们).
我一直在阅读了很多关于defpackage和defsystem和asdf.但我读过的所有内容似乎都集中在这项任务的某个特定角落.我在查看自定义模块创建,部署和使用的大局方面遇到了很多麻烦.所以假设我面前有一个Lisp环境(CLISP或SBCL)以及一个或多个.lisp文件,我想制作一个软件包或库,是否有一个文件可以解释哪些步骤需要这样做?这可能是我已经读过的东西,但由于不理解上下文而没有跟踪.我所读到的关于ASDF的内容在功能上看起来似乎是我所追求的,但我不知道ASDF是否是我唯一的选择,或者它是否恰好是事实上的标准以及大多数其他人使用的,或者随你.我在SBCL玩了一下,并且不确定我是否正确使用它,并且没有看到如何在CLISP中设置它的信息.所以我想要了解什么是这个任务的中间,香草方法.
我知道这是一个庞大,草率的子问题.再说一次,如果有一些很好的参考资料,我可以阅读.我只是在查看它应该如何工作,以及是否有任何"最佳"方法,或者在Lisp中是否有点"狂野西部"选择图书馆时遇到一些麻烦 - 管理员 - 你喜欢的方法.我做谷歌的事情并阅读任何看起来相关的东西,但我的大脑正在全力以赴.
谢谢.
我想知道如何依赖ASDF系统中特定版本的库?
(asdf:defsystem #:my-system
:serial t
:description "Describe my-system here"
:author "My Name <my.name@example.com>"
:license "Specify license here"
:depends-on (#:hunchentoot
#:cl-who)
:components ((:file "package")
(:file "dispatch")))
Run Code Online (Sandbox Code Playgroud)
以上系统依赖于hunchentoot和cl-who.据我所知,将使用两个库的最新版本.如何指定使用cl-who 1.0.5(例如)?
提前致谢.
我已经设置了Quicklisp以便在SBCL运行时运行,并将以下行添加到我正在尝试使用该priority-queue库的文件顶部(正如我之前的问题的回答中所建议的,Common Lisp的优先级队列?).但是,当我尝试使用它时,我从SBCL收到错误,说priority-queue没有定义函数!我错过了什么?
作为参考,我试着写这样的东西:
(ql:quickload "priority-queue")
(defparameter *heap* (make-pqueue #'<))
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,说make-pqueue没有定义.
[2]> (ql:quickload "cl+ssl")
To load "cl+ssl":
Load 1 ASDF system:
cl+ssl
; Loading "cl+ssl"
*** - Unable to load any of the alternatives:
("libssl32.dll" "ssleay32.dll")
Run Code Online (Sandbox Code Playgroud)
在我的头撞墙后三天,我问我关于堆栈溢出的第一个问题.如果运气不好,它将不会被删除,并且随着堆积的增加,将有一个解决方案.
在尝试通过quicklisp安装Humbler时,CL + SSL(几个依赖项之一)抱怨"无法加载任何替代方案:(libss132.dll"ssleay32.dll")
我很快就知道我必须安装OpenSSL dll,这很容易.我还了解到,我可能必须将CFFI指向我的dll方向,并且我必须确保获得64位版本.但是这个错误仍然存在.
在Win 7 64上使用Clisp 2.47
我已经尝试过的事情:
将各种位置推送到CFFI:Foreign-Library-Directories列表
中断1 CL + SSL [3]>:R2输入新值(未评估):("C:\ OpenSSL-Win64\libssl32.dll")*** - 无法加载外部库(LIBSSL32.DLL-8079).FFI:OPEN-FOREIGN-LIBRARY:无法打开库"C:\ OpenSSL-Win64\libssl32.dll"
卸载然后安装所有不同的OpenSSL版本
我之前从未问过有关堆栈溢出的问题.然后我再也没有花三天时间试图获得依赖加载.我中风前请帮忙.
我发现有时ql:quickload只是默默地跳过严重错误,如:
;Compiler warnings for "home:common-lisp;mito-email-auth;src;models.lisp.newest" :
; In SEND-CODE: In the form ("??? ????? ?? ???? [Skazorama.ru](~A), ????????? ?? [???? ??????](~A)" URL URL), "??? ????? ?? ???? [Skazorama.ru](~A), ????????? ?? [???? ??????](~A)" is not a symbol or lambda expression.
Run Code Online (Sandbox Code Playgroud)
(我忘了将宏导入包中.这个宏应该将代码转换成有用的东西).
但是当我使用时加载此库时asdf:load-system,会弹出一个错误并可用于调试.
你是如何忍受这种行为的?
我最近一直在做我的第一个quicklisp项目,我想分享一下。我已将其放在github上,但并非每个人都安装了emacs + slime + quicklisp,因此我想制作一个可执行文件,可以将其放入代码中。
为此,我正在使用buildapp并遵循此 stackoverflow答案中列出的步骤。
$ sbcl --no-userinit --no-sysinit --non-interactive \
--load ~/quicklisp/setup.lisp \
--eval '(ql:quickload "ltk-colorpicker")' \
--eval '(ql:write-asdf-manifest-file "quicklisp-manifest.txt")'
$ buildapp --output out \
--manifest-file quicklisp-manifest.txt \
--load-system ltk-colorpicker \
--entry colorpicker
Run Code Online (Sandbox Code Playgroud)
运行这些命令后,出现以下错误:
Fatal INPUT-ERROR-IN-LOAD:
READ error during LOAD:
The symbol "*SYSTEM-DEFINITION-SEARCH-FUNCTIONS*" is not external in the ASDF/FIND-SYSTEM package.
Line: 16, Column: 90, File-Position: 15267
Stream: #<SB-INT:FORM-TRACKING-STREAM for "file /home/nathan/quicklisp/local-projects/ltk-colorpicker/dumper-2SKVI5f7.lisp" {1001B70F83}>
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是我什至不知道如何开始修复它。我已经看到过这个 gibhub问题,但这与Homebrew的问题有关,甚至从未提及buildapp。一切都很混乱。我希望我能得到一些帮助。
预先感谢您的任何答案。
我是 Common Lisp 的初学者,我想使用一个库。
我找不到加载/要求/使用模块的一个简单示例。我已经像这样安装了 cl-ppcre :
$ sbcl --non-interactive --eval '(ql:quickload "cl-ppcre")'
To load "cl-ppcre":
Load 1 ASDF system:
cl-ppcre
; Loading "cl-ppcre"
..
Run Code Online (Sandbox Code Playgroud)
但我不知道如何实际使用它。我尝试过以下方法和其他十几种方法,但没有一种有效。
$ sbcl --noinform --non-interactive --eval '(progn (require "cl-ppcre") (cl-ppcre:split "\s+" "1 2 3"))'
Unhandled SB-INT:SIMPLE-READER-PACKAGE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
{1004DB8073}>:
Package CL-PPCRE does not exist.
Stream: #<dynamic-extent STRING-INPUT-STREAM (unavailable) from "(progn (...">
Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1004DB8073}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-INT:SIMPLE-READER-PACKAGE-ERROR "Package ~A does not exist." {1003640A83}> #<unused argument> :QUIT T) …Run Code Online (Sandbox Code Playgroud) 我试图使用lisp代码制作可执行文件.但是我根本无法编译 lisp文件,因为hellowolrd在加载helloworld系统 之前没有包
;; test.lisp
(asdf:load-system :helloworld)
(defun main()
(helloworld:start))
Run Code Online (Sandbox Code Playgroud)
当然,我制作了helloworld系统并将其放入~/quicklisp/local-projects/.helloworld系统成功加载没有错误.
;; ~/quicklisp/local-projects/helloworld/helloworld.asd
(asdf:defsystem helloworld
:version "1.0"
:components ((:file "package")))
;; ~/quicklisp/local-projects/helloworld/package.lisp
(defpackage :helloworld
(:use :common-lisp :asdf)
(:export :start))
(in-package :helloworld)
(defun start()
(format t "Welcome, ASDF"))
Run Code Online (Sandbox Code Playgroud)
我想编译test.lisp没有显式加载.我也试过use-package和defpackage,但失败了.
;; test.lisp
(asdf:load-system :helloworld)
(use-package :helloworld)
(defun main()
(helloworld:start))
;; test.lisp
(asdf:load-system :helloworld)
(defpackage :test
(:use :cl :asdf)
(:export :main))
(in-package :test)
(defun main()
(helloworld:start)) …Run Code Online (Sandbox Code Playgroud)