Guest User

extensible options-spec for getopt-long

a guest
May 13th, 2018
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.60 KB | None | 0 0
  1. (use-modules
  2.   (ice-9 getopt-long))
  3.  
  4. (define supported-props
  5.   (alist->hash-table
  6.    (map
  7.     (lambda (k)
  8.       (cons k #t))
  9.     '(single-char value required? predicate))))
  10.  
  11. (define (conform-props props)
  12.   (fold-right
  13.    (lambda (kv new-props)
  14.      (if (hash-ref supported-props (car kv))
  15.      (cons kv new-props)
  16.      new-props))
  17.    #nil
  18.    props))
  19.  
  20. (define (conform-spec spec)
  21.   (map
  22.    (lambda (kv)
  23.      (cons
  24.       (car kv)
  25.       (conform-props (cdr kv))))
  26.    spec))
  27.  
  28. (define (getopt-long args options-spec)
  29.   ((@ (ice-9 getopt-long) getopt-long)
  30.    args (conform-spec options-spec)))
Add Comment
Please, Sign In to add comment