(module easy-args (define-arguments argument-list use-argument-list) (import scheme chicken) (use srfi-13 data-structures) ;; list of defined command line options, each a list of ;; (command-line-flag parameter-object guard-procedure) (define argument-list (make-parameter '())) ;; defines parameterized command line options (define-syntax define-arguments (syntax-rules () ((_ ( ...) ...) (begin (unless (string? ) (error 'define-arguments "Default argument value must be a string" '( ))) ... (define (make-parameter ((or ... o) ))) ... (argument-list `((,(string-delete #\* (format "-~a" ')) , ,(or ... o)) ...)))))) ;; handles a flat list of (command-line-arguments) ;; against the defined argument-list (define (use-argument-list lst) (for-each (lambda (args) (let ((arg (assoc (car args) (argument-list)))) (when arg ((cadr arg) ((caddr arg) (cadr args)))))) (chop lst 2))))