I have a function in which I pass a filename followed by several integer parameters. The problem is that I now want to run my code as a Unix script, using command-line-args-left to pass parameters from the command line. When #1 calls process-args, a list is created with all of the values. In #2, a list of a list {eg. ((1 2 3)) } is created upon entry to process-args. What is the best way to keep my code generic so I can handle both cases #1 and #2 in the same function?
(defun process-args (filename &rest cols) ...) (process-args filename 1 2 3); #1 (process-args (car command-line-args-left) (cdr command-line-args-left)); #2
Here is some working sample code with which I'm testing:
#!/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))