假设我在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)
在我的软件包的顶部 - 这是我为开发所做的 - 但我觉得强制一个包管理器对用户来说不是一个好主意.
还有更好的选择吗?
我想setf
根据某个变量来选择结构的不同字段。我决定使用以下方法:
生成一个带有字段访问者名称的字符串:
(setq my-string (format nil "STRUCT-ESTADISTICAS-NUM-~S" x))
Run Code Online (Sandbox Code Playgroud)
然后将intern与funcall一起使用:
(funcall (intern my-string) *estadisticas*)
Run Code Online (Sandbox Code Playgroud)
该调用返回结构字段的正确值,但是如果我尝试setf
修改此值,它会抱怨说:
(setf (funcall(intern my-string) *estadisticas*) 0)
Error: `(SETF FUNCALL)' is not fbound
Run Code Online (Sandbox Code Playgroud)
我可以理解为什么它不起作用,但是我找不到修改结构域的方法。任何的想法?谢谢。
多个用户需要使用Common Lisp中创建的接口访问同一文件目录.发生这种情况时会出现许多竞争条件 例如,当多个用户添加或删除具有相同时间的文件时.在工作完成时,lisp中是否有办法"锁定"特定目录?这与多线程环境中的"synchronized"块类似,但我有单独的Lisp实例.我在Windows上使用Allegro CL.
编辑:对此问题的不同解决方案的想法也将不胜感激.
我试图弄清楚像 SLIME 或 SLY 这样的软件如何在 Inspector 中显示变量时获取变量的内存地址。我可以使用什么 Common Lisp 函数来以编程方式执行此操作?
例子:
这是#x100cab066d1
这里感兴趣的。