如何在sbcl(common-lisp)中使用参数,对于sb-ext:run-program?

时间:2016-08-26 09:41:10

标签: common-lisp sbcl

我试图通过SBCL的sb-ext:run-program在common-lisp中调用外部shell命令。

有关此run-program命令的文档,请访问: http://sbcl.org/manual/index.html 在该部分 7.7.3运行外部程序

该页面不包含示例。通过查看此页面,我想出了如何使用它: stackoverflow examples for sb-ext:run-program

这就是我想要做的......

首先,我为参数定义一个变量:

(defconstant *a-argument* "-lh")

然后我调用一个命令:

(sb-ext:run-program "C:\\Program Files (x86)\\Gow\\bin\\ls.exe"
                    '(*a-argument*)
                    :output *standard-output*)

它给了我以下错误:

debugger invoked on a TYPE-ERROR in thread
#<THREAD "main thread" RUNNING {100299C8F3}>:
  The value
    *A-ARGUMENT*
  is not of type
    SEQUENCE

但是,如果我这样称呼它:

(sb-ext:run-program "C:\\Program Files (x86)\\Gow\\bin\\ls.exe"
                    '("-lh")
                    :output *standard-output*)

然后它的工作原理。唯一的区别是直接使用"-lh",而不是*a-argument*

所以我的问题是:
我需要做什么,使运行程序调用在参数列表中使用变量?

额外信息:

windows32 2.6.1 7601 i686-pc Intel unknown MinGW
SBCL 1.3.8

但是我也在FreeBSD 10.1上测试过这个问题,我遇到了同样的问题。

1 个答案:

答案 0 :(得分:3)

答案是由jkiiski给出的:

我需要更改此电话:

(sb-ext:run-program "C:\\Program Files (x86)\\Gow\\bin\\ls.exe"
                    '(*a-argument*)
                    :output *standard-output*)

致电:

(sb-ext:run-program "C:\\Program Files (x86)\\Gow\\bin\\ls.exe"
                    (list *a-argument*)
                    :output *standard-output*)