Common lisp 如何在sbcl(commonlisp)中为sbext:run程序使用参数?

Common lisp 如何在sbcl(commonlisp)中为sbext:run程序使用参数?,common-lisp,sbcl,Common Lisp,Sbcl,我试图通过SBCL的sb ext:run程序在common lisp中调用一个外部shell命令 有关此运行程序命令的文档可在以下位置找到: 在节中 7.7.3运行外部程序 该页不包含示例。通过查看此页面,我了解了如何使用它: 这就是我想做的 首先,我为参数定义了一个变量: (defconstant *a-argument* "-lh") 然后我调用一个命令: (sb-ext:run-program "C:\\Program Files (x86)\\Gow\\bin\\ls.exe"

我试图通过SBCL的sb ext:run程序在common lisp中调用一个外部shell命令

有关此运行程序命令的文档可在以下位置找到: 在节中 7.7.3运行外部程序

该页不包含示例。通过查看此页面,我了解了如何使用它:

这就是我想做的

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

(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
然后它就起作用了。唯一的区别是直接使用
“-lh”
,而不是
*a参数*

所以我的问题是:
如果参数列表中有一个变量,我需要做什么才能使运行程序调用工作

额外信息:

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*)
对于此呼叫:

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

”(*a-argument*)
是一个带引号的列表,其中包含符号
*a-argument*
,而不是该名称下的变量值(请记住,带引号的列表的内容不会被计算)。您需要使用
(list*a-argument*)
。我试过了,但它似乎分别计算每个符号。。。给我以下错误:
(sbext:run program“C:\\program Files(x86)\\Gow\\bin\\ls.exe”(“-lh”(list*a-argument*)):output*标准输出*)C:\program Files(x86)\Gow\bin\ls.exe:(list:没有这样的文件或目录C:\program Files(x86)\Gow\bin\ls.exe:*a-argument*):无效的参数
啊,对不起,我现在明白你的意思了。。。这似乎确实有效。谢谢@jkiiski。可能的副本