multiple-value-bind
を使用して(ql:system-apropos "regex")
の出力を変数に保存しようとしていますが、nil
のみを使用しています。しかし、このコマンドはREPLにテキストを出力するだけで、どんな変数も返さないので、動作しないようです。その場合は、ql:system-apropos
の出力をリストまたは配列として取得する手段があります。特に、それによって返されるパッケージ名があります。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
パッケージ名を部分名または正規表現を入力として使用する他の方法も、現在のパッケージの完全なリストを取得することも有効です。これを実行するための実行可能なソリューションはありますか?
ありがとうございます。これはうまくいきます: '(defparameter * lispbuilder-packages-list *(出力先の文字列(*標準出力*)(ql:system-apropos" lispbuilder ")))' – nrz