首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ql:system-apropos返回的包名存储到一个变量中

将ql:system-apropos返回的包名存储到一个变量中
EN

Stack Overflow用户
提问于 2012-05-07 06:28:50
回答 1查看 162关注 0票数 0

我试图使用multiple-value-bind(ql:system-apropos "regex")的输出保存到一个变量中,但我只使用了nil。但是,该命令似乎只将文本打印到REPL,并且不返回任何变量,因此似乎不起作用。在这种情况下,有没有办法以列表或数组的形式获得ql:system-apropos的输出,特别是它返回的包名。

这段基本的multiple-value-bind代码可以工作:

代码语言:javascript
复制
* (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没有什么可绑定的?):

代码语言:javascript
复制
* (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返回的所有包,例如:

代码语言:javascript
复制
(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包名称的任何其他方法也是一种可行的解决方案(甚至可以获得包的当前完整列表)。有什么可行的解决方案可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-07 06:39:10

您与Common Lisp的交互看起来太复杂了。

您会问:将ql:system-apropos返回的包名存储到一个变量中。

它真的返回了什么吗?或者它只打印一些东西?

你可以很容易地找到答案。我在我的示例中使用了CL:APROPOS

代码语言:javascript
复制
CL-USER 141 > (apropos "plist" "CL")
SYMBOL-PLIST (defined)
MAPLIST (defined)

只需描述返回值:

代码语言:javascript
复制
CL-USER 142 > (describe (apropos "plist" "CL"))
SYMBOL-PLIST (defined)
MAPLIST (defined)
NIL is a NULL
NAME          "NIL"
VALUE         NIL
FUNCTION      #<unbound function>
PLIST         (TYPE::DIRECT-TYPE-PREDICATE TYPE::RETURN-FALSE)
PACKAGE       #<The COMMON-LISP package, 2/4 internal, 978/1024 external>

什么都没有。APROPOS只是打印一些东西。

Common Lisp使用输出流。只需重新绑定保存输出流的变量:

代码语言:javascript
复制
CL-USER 143 > (with-output-to-string (*standard-output*)
                (apropos "plist" "CL"))
"SYMBOL-PLIST (defined)
MAPLIST (defined)"

现在您得到了一个字符串,您可以对其进行解析。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10474824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档