我正在尝试使用 将 的输出保存(ql:system-apropos "regex")
到变量中multiple-value-bind
,但我只有nil
. 但是,该命令似乎只将文本打印到 REPL 并且不返回任何变量,因此似乎不起作用。在那种情况下,有没有办法将输出ql:system-apropos
作为列表或数组,特别是它返回的包名称。
此基本multiple-value-bind
代码有效:
* (multiple-value-bind (first-var second-var) (floor 5 3) (defparameter *first-var* first-var) (defparameter *second-var* second-var))
*SECOND-VAR*
* *first-var*
1
* *second-var*
2
*
但这没有(如果没有什么可以绑定的multiple-value-bind
?):
* (multiple-value-bind (first-var second-var) (ql:system-apropos "regex") (defparameter *first-var* first-var) (defparameter *second-var* second-var))
#<SYSTEM com.informatimago.common-lisp.regexp / com.informatimago-20120407-git / quicklisp 2012-04-07>
#<SYSTEM lispbuilder-regex / lispbuilder-20110619-svn / quicklisp 2012-04-07>
#<SYSTEM recursive-regex / recursive-regex-20120407-git / quicklisp 2012-04-07>
#<SYSTEM recursive-regex-test / recursive-regex-20120407-git / quicklisp 2012-04-07>
#<SYSTEM regex / regex-1 / quicklisp 2012-04-07>
*SECOND-VAR*
* *first-var*
NIL
* *second-var*
NIL
*
所以似乎ql:system-apropos
只能通过使用format
或其他一些打印命令在屏幕上打印文本?
这样做的目的是通过使用一些字符串处理命令(可能是一些正则表达式)来提取输出的包名称,并自动安装或重新安装返回的所有包ql:system-apropos
,例如:
(defparameter *package-name-string* "lispbuilder")
(multiple-value-bind (lispbuilder-packages-list) (ql:system-apropos *package-name-string*) (defparameter *lispbuilder-packages-list* lispbuilder-packages-list))
使用部分名称或某些正则表达式作为输入来获取quicklisp
包名称的任何其他方式也是一个可行的解决方案(即使获取当前完整的包列表也会很有用)。有没有可行的解决方案来做到这一点?