Previous: , Up: srfi args-fold   [Index]


2.20.5 Some usage examples

Short options without arguments:

(import (rnrs) (srfi :37))

(define (unrecognised-option-proc option name arg seed)
  (error 'test "unknown option" option name arg))

(define (make-seed)
  (make-vector 3 '()))

(define (make-option-processor index)
  (lambda (option name arg seed)
    (vector-set! seed index (cons name (vector-ref seed index)))
    seed))

(define (make-operand-processor index)
  (lambda (operand seed)
    (vector-set! seed index (cons operand (vector-ref seed index)))
    seed))

(args-fold '("-a" "-b" "ciao")
   (list (option '(#\a) #f #f (make-option-processor 1))
         (option '(#\b) #f #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(("ciao") (#\a) (#\b))

(args-fold '("salut" "-a" "hello" "-b" "ciao")
   (list (option '(#\a) #f #f (make-option-processor 1))
         (option '(#\b) #f #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(("ciao" "hello" "salut") (#\a) (#\b))

(args-fold '("-ab")
   (list (option '(#\a) #f #f (make-option-processor 1))
         (option '(#\b) #f #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ '#(() (#\a) (#\b))

Short options with required arguments:

(import (rnrs) (srfi :37))

(define (unrecognised-option-proc option name arg seed)
  (error 'test "unknown option" option name arg))

(define (make-seed)
  (make-vector 3 '()))

(define (make-option-processor index)
  (lambda (option name arg seed)
    (vector-set! seed index (cons arg (vector-ref seed index)))
    seed))

(define (make-operand-processor index)
  (lambda (operand seed)
    (vector-set! seed index (cons operand (vector-ref seed index)))
    seed))

(args-fold '("-a" "hello" "-b" "ciao")
   (list (option '(#\a) #t #f (make-option-processor 1))
         (option '(#\b) #t #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(() ("hello") ("ciao"))

(args-fold '("-ahello" "-bciao")
   (list (option '(#\a) #t #f (make-option-processor 1))
         (option '(#\b) #t #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(() ("hello") ("ciao"))

(args-fold '("salut" "-a" "hello" "-b" "ciao")
   (list (option '(#\a) #t #f (make-option-processor 1))
         (option '(#\b) #t #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(("salut") ("hello") ("ciao"))

(args-fold '("-ahello" "-bciao")
   (list (option '(#\a) #t #f (make-option-processor 1))
         (option '(#\b) #t #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(() ("hello") ("ciao"))

Short options with optional arguments:

(import (rnrs) (srfi :37))

(define (unrecognised-option-proc option name arg seed)
  (error 'test "unknown option" option name arg))

(define (make-seed)
  (make-vector 3 '()))

(define (make-option-processor index)
  (lambda (option name arg seed)
    (vector-set! seed index (cons arg (vector-ref seed index)))
    seed))

(define (make-operand-processor index)
  (lambda (operand seed)
    (vector-set! seed index (cons operand (vector-ref seed index)))
    seed))

(args-fold '("-ahello" "-b")
   (list (option '(#\a) #f #t (make-option-processor 1))
         (option '(#\b) #f #t (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(() ("hello") (#f))

Long options without arguments:

(import (rnrs) (srfi :37))

(define (unrecognised-option-proc option name arg seed)
  (error 'test "unknown option" option name arg))

(define (make-seed)
  (make-vector 3 '()))

(define (make-option-processor index)
  (lambda (option name arg seed)
    (vector-set! seed index (cons name (vector-ref seed index)))
    seed))

(define (make-operand-processor index)
  (lambda (operand seed)
    (vector-set! seed index (cons operand (vector-ref seed index)))
    seed))

(args-fold '("--alpha" "--beta" "ciao")
   (list (option '("alpha") #f #f (make-option-processor 1))
         (option '("beta")  #f #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(("ciao") ("alpha") ("beta"))

(args-fold '("salut" "--alpha" "hello" "--beta" "ciao")
   (list (option '("alpha") #f #f (make-option-processor 1))
         (option '("beta")  #f #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(("ciao" "hello" "salut") ("alpha") ("beta"))

Long options with required arguments:

(import (rnrs) (srfi :37))

(define (unrecognised-option-proc option name arg seed)
  (error 'test "unknown option" option name arg))

(define (make-seed)
  (make-vector 3 '()))

(define (make-option-processor index)
  (lambda (option name arg seed)
    (vector-set! seed index (cons arg (vector-ref seed index)))
    seed))

(define (make-operand-processor index)
  (lambda (operand seed)
    (vector-set! seed index (cons operand (vector-ref seed index)))
    seed))

(args-fold '("--alpha" "hello" "--beta" "ciao")
   (list (option '("alpha") #t #f (make-option-processor 1))
         (option '("beta")  #t #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(() ("hello") ("ciao"))

(args-fold '("salut" "--alpha" "hello" "--beta" "ciao")
   (list (option '("alpha") #t #f (make-option-processor 1))
         (option '("beta")  #t #f (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(("salut") ("hello") ("ciao"))

Long options with optional arguments:

(import (rnrs) (srfi :37))

(define (unrecognised-option-proc option name arg seed)
  (error 'test "unknown option" option name arg))

(define (make-seed)
  (make-vector 3 '()))

(define (make-option-processor index)
  (lambda (option name arg seed)
    (vector-set! seed index (cons arg (vector-ref seed index)))
    seed))

(define (make-operand-processor index)
  (lambda (operand seed)
    (vector-set! seed index (cons operand (vector-ref seed index)))
    seed))

(args-fold '("--alpha=hello" "--beta")
   (list (option '("alpha") #f #t (make-option-processor 1))
         (option '("beta")  #f #t (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(() ("hello") (#f))

(args-fold '("--alpha=hello" "--beta=ciao")
   (list (option '("alpha") #f #t (make-option-processor 1))
         (option '("beta")  #f #t (make-option-processor 2)))
   unrecognised-option-proc
   (make-operand-processor 0)
   (make-seed))
⇒ #(() ("hello") ("ciao"))

Previous: , Up: srfi args-fold   [Index]