2

コマンドの出力を処理する必要がある一般的な Lisp プログラムを作成しています。ただし、結果を別の関数で使用しようとすると、戻り値として NIL しか取得できません。

コマンドを実行するために使用する関数は次のとおりです。

(defun run-command (command &optional arguments)
       (with-open-stream (pipe 
                 (ext:run-program command :arguments arguments
                                  :output :stream :wait nil)) 
       (loop
                :for line = (read-line pipe nil nil)
                :while line :collect line)))

単独で実行すると、次のようになります。

CL-USER> (run-command "ls" '("-l" "/tmp/test"))
         ("-rw-r--r-- 1 petergil petergil 0 2011-06-23 22:02 /tmp/test")

ただし、関数を介して実行すると、NIL のみが返されます。

(defun sh-ls (filename)
       (run-command "ls" '( "-l" filename)))
CL-USER> (sh-ls  "/tmp/test")
         NIL

関数で結果を使用するにはどうすればよいですか?

4

2 に答える 2

7

これを試して:

(defun sh-ls (filename)
       (run-command "ls" (list "-l" filename)))

'( "-l" filename)は、filenameを評価するのではなく、リストと記号'filename'を引用しています。

于 2011-06-23T21:11:07.673 に答える
4

sexprの前とfilenameの前にbackquote`を使用して評価することもできます。

(defun sh-ls (filename)
       (run-command "ls" `("-l" ,filename)))
于 2011-06-24T12:02:09.793 に答える