Skip to content

Instantly share code, notes, and snippets.

@mnzk
Created January 8, 2012 12:06
Show Gist options
  • Save mnzk/1578137 to your computer and use it in GitHub Desktop.
Save mnzk/1578137 to your computer and use it in GitHub Desktop.
parse-args-f
;; seealso https://twitter.com/#!/mnzktw/status/155976688021405696
(defn parse-args [args]
(->> (concat ["-f" nil] args)
(partition-by (partial = "-f") )
(partition 2)
(map second)
((juxt (comp rest (partial map first))
(partial mapcat rest)))))
;;-- examples
(parse-args '("-f" "foo" "-f" "bar" "hoge" "-f" "fizz" "fuga" "piyo"))
;;=> [("foo" "bar" "fizz") ("hoge" "fuga" "piyo")]
(parse-args '("foo" "-f" "bar" "hoge" "-f" "fizz" "fuga" "piyo"))
;;=> [("bar" "fizz") ("foo" "hoge" "fuga" "piyo")]
(parse-args '("foo" "bar" "hoge" "fizz" "fuga" "piyo"))
;;=> [() ("foo" "bar" "hoge" "fizz" "fuga" "piyo")]
(parse-args '("-f" "foo" "-f" "bar" "-f" "hoge"))
;;=> [("foo" "bar" "hoge") ()]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment