You are looking at historical revision 25505 of this page. It may differ significantly from its current revision.



Handle command-line arguments as parameter objects.




easy-args provides a simple way to handle command-line arguments as parameter objects.

It is defined over srfi-37 and is intended to be easy to use for small binaries and one-off scripts. For more flexible option handling and usage message utilities, use srfi-37 itself or see args, getopt-long, or usage.

The source for this egg is available at


[syntax] (define-arguments (name [value [guard]]) ...)

define-arguments defines parameter objects for the given command line option names and sets them according to the program's command-line-arguments parameter.

For each specified argument, name should be an identifier or list of identifiers. The first of these will be bound to the newly-created parameter object. value, if given, must be a boolean, string, number or symbol, and will be the default value of the parameter object. If no value is given, #f is used. If a procedure guard is given, it is used as the parameter object's conversion procedure.

Each name, when prefixed by one dash (in the case of a single-character identifier) or two (for all others), will be used as a command-line flag to set the corresponding parameter object's value. If name contains asterisks, they are stripped from the flag.

define-arguments reads and modifies Chicken's command-line-arguments parameter, setting matched parameter objects to the specified values and removing their options from the list. Unmatched arguments are accumulated into an alist accessible by the unmatched-arguments procedure. Upon completion, command-line-arguments will contain any non-option arguments to the program. The return value is unspecified.


[parameter] invalid-argument-handler

invalid-argument-handler is called when define-arguments encounters an invalid command-line value. It is a procedure of three arguments: an error message (string), option name (string or character) and value (a string or #t). By default, this procedure simply prints an error message and exits the program.


[procedure] (unmatched-arguments)

Returns an alist of the command-line arguments unmatched by define-arguments. If called before define-arguments, it will return an empty list.


(use easy-args extras)

  (prompt "Your name? ")
  ((exclamations e) 1))

(display (prompt))

(let ((message (string-join `("Hello," ,(read-line)))))
  (if (all-caps)
    (display (string-upcase message))
    (display message)))

(print (make-string (exclamations) #\!))

(if (not (null? (unmatched-arguments)))
  (print (unmatched-arguments)))

With the file above as greeter.scm:

 $ csc greeter.scm
 $ ./greeter
 Your name? [Henrietta]
 Hello, Henrietta!
 $ ./greeter --all-caps
 Your name? [Henrietta]
 $ ./greeter --prompt 'Name: ' -e3
 Name: [Henrietta]
 Hello, Henrietta!!!
 $ ./greeter -w --unmatched=args
 Your name? Henrietta
 Hello, Henrietta!
 ((w . #t) (unmatched . args))



Evan Hanson


Copyright (c) 2011 Evan Hanson, 3-Clause BSD.