Hey, how come we did not see this even more concise version sooner ? :-):
;; using just clojure 1.0.0 without any additional library :-)
;; from command line:
;; java -cp clojure.jar /path/to/challenge2.clj "()" "((([[]])))" ... ...
(ns challenge2)
(defn balanced? [s]
(and
(every? #{ \( \) \[ \] } s)
(try (read-string s) true (catch java.lang.RuntimeException e false))))
(defn main [] (apply print (map balanced? *command-line-args*)))
(when *command-line-args* (main))
Hehe
--
laurent
2009/7/2 Mark Volkmann <[email protected]>:
>
> There is a challenge on the blog of Tony Morris at
> http://dibblego.wordpress.com/2008/09/05/haskell-scala-java-7-functional-java-java/#comment-2460.
> It's a parsing problem for which he compares solutions in Haskell,
> Scala and Java. I added a Clojure solution. I don't know if this is
> the "best" way to solve this with Clojure, but it certainly works.
> Here's my code, including unit tests.
>
> (use 'clojure.test)
>
> (defn- match [prev-char next-char]
> (condp = prev-char
> \( (= next-char \))
> \[ (= next-char \])
> false))
>
> ; Need a better name for this function.
> (defn- helper [s stack]
> (if (empty? s)
> (empty? stack)
> (let [c (first s)
> top (first stack)
> stack (if (match top c) (next stack) (cons c stack))]
> (helper (next s) stack))))
>
> (defn balanced? [s] (helper s '()))
>
> (doseq [arg *command-line-args*]
> (println (balanced? arg)))
>
> (deftest match-test
> (is (match \( \)))
> (is (match \[ \]))
> (is (not (match \( \{))))
>
> (deftest balanced-test
> (is (balanced? "()"))
> (is (balanced? "[]"))
> (is (balanced? "([])"))
> (is (balanced? "[()]"))
> (is (balanced? "[]()"))
> (is (balanced? "[][[([])]]"))
> (is (not (balanced? "(")))
> (is (not (balanced? ")")))
> (is (not (balanced? "[")))
> (is (not (balanced? "]")))
> (is (not (balanced? "][")))
> (is (not (balanced? ")(")))
> (is (not (balanced? "( )")))
> (is (not (balanced? "([)")))
> (is (not (balanced? "[)]")))
> (is (not (balanced? "([)]")))
> (is (not (balanced? "({})")))
> (is (not (balanced? "[())]"))))
>
> (run-tests)
>
> --
> R. Mark Volkmann
> Object Computing, Inc.
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---