Guest User

Untitled

a guest
May 24th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.63 KB | None | 0 0
  1. (defn- re-clause-to-if [s [re bindings body] else]
  2. `(if-let [[~'_ ~@bindings] (re-find ~re ~s)]
  3. ~body
  4. ~else))
  5.  
  6. (defn- re-clauses-to-ifs [s clauses]
  7. (when-first [clause clauses]
  8. (if (and (not (next clauses))
  9. (= (count clause) 1))
  10. (first clause)
  11. (re-clause-to-if s clause (re-clauses-to-ifs s (rest clauses))))))
  12.  
  13. (defmacro cond-re [s & clauses]
  14. (re-clauses-to-ifs s (partition 3 3 nil clauses)))
  15.  
  16. (defn parse-flag [s]
  17. (cond-re s
  18. #"^--([^=]+)=(.*)" [flag value] [flag value]
  19. #"^--(.*)" [flag] [flag nil]))
  20.  
  21. (comment
  22.  
  23. (parse-flag "--foo")
  24. => ["foo" nil]
  25.  
  26. (parse-flag "--foo=bar")
  27. => ["foo" "bar"]
  28.  
  29. )
Add Comment
Please, Sign In to add comment