如何在 sbcl (common-lisp) 中为 sb-ext:运行-program 使用参数?

How can you use parameters in sbcl (common-lisp), for sb-ext:run-program?

我正在尝试通过 SBCL 的 sb-ext:运行-program.

在 common-lisp 中调用外部 shell 命令

有关此 运行 程序命令的文档,可在此处找到: http://sbcl.org/manual/index.html 在本节中 7.7.3 运行 外部程序

该页面不包含示例。通过查看此页面,我想出了如何使用它: Whosebug 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 上测试过,我也遇到了同样的问题。

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*)