У меня есть функция, в которой я передаю имя файла, за которым следуют несколько целочисленных параметров. Проблема в том, что теперь я хочу запустить свой код как сценарий Unix, используя command-line-args-left для передачи параметров из командной строки. Когда # 1 вызывает аргументы процесса, создается список со всеми значениями. В # 2 список из списка {например. ((1 2 3))} создается при входе в process-args. Каков наилучший способ сделать мой код универсальным, чтобы я мог обрабатывать оба случая # 1 и # 2 в одной и той же функции?
(defun process-args (filename &rest cols) ...)
(process-args filename 1 2 3); <strong>#1</strong>
(process-args (car command-line-args-left) (cdr command-line-args-left)); <strong>#2</strong>
Вот пример рабочего кода, с которым я тестирую:
#!/usr/bin/emacs --script
(defun process-args (filename &rest cols)
(princ (concat "Script Name: " file "\n"))
(princ (concat "File parameter: " filename "\n"))
(princ "Other arg values: ")
(princ cols)
(princ "\nIs list: ")
(princ (listp cols))
(princ "\n----------\n")
(while cols
(princ (car cols))
(princ "...")
(setq cols (cdr cols)))
(princ "\n"))
(print "===== Version #1: Base case - becomes (1 2 3) =====")
(process-args (car command-line-args-left) 1 2 3)
(print "===== Version #2: Passing cdr of list as one string =====")
(process-args (car command-line-args-left) (mapconcat 'identity (cdr command-line-args-left) " "));
(print "===== Version #3: Test of list of list - becomes ((1 2 3)) =====")
(process-args (car command-line-args-left) '(1 2 3))