]> gitweb.factorcode.org Git - factor.git/commitdiff
rosetta-code.balanced-brackets: cleanup and test.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 7 Dec 2014 05:40:24 +0000 (21:40 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 7 Dec 2014 05:40:24 +0000 (21:40 -0800)
extra/rosetta-code/balanced-brackets/balanced-brackets.factor

index be175cc9ba7ad1333c8369193b97361e454e894b..aa174fe1487e9977f35c18a282ec42c0f29fee1e 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (c) 2012 Anonymous
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io formatting locals kernel math sequences unicode.case ;
+USING: combinators kernel locals math sequences ;
 IN: rosetta-code.balanced-brackets
 
 ! http://rosettacode.org/wiki/Balanced_brackets
@@ -21,19 +21,15 @@ IN: rosetta-code.balanced-brackets
 ! [][]      OK   ][][      NOT OK
 ! [[][]]    OK   []][[]    NOT OK
 
-:: balanced ( str -- )
-   0 :> counter!
-   1 :> ok!
-   str
-   [ dup length 0 > ]
-   [ 1 cut swap
-        "[" = [ counter 1 + counter! ] [ counter 1 - counter! ] if
-        counter 0 < [ 0 ok! ] when
-   ]
-   while
-   drop
-   ok 0 =
-   [ "NO" ]
-   [ counter 0 > [ "NO" ] [ "YES" ] if ]
-   if
-   print ;
+:: balanced? ( str -- ? )
+    0 :> counter!
+    t :> ok!
+    str [
+        {
+            { CHAR: [ [ 1 ] }
+            { CHAR: ] [ -1 ] }
+            [ drop 0 ]
+        } case counter + counter!
+        counter 0 < [ f ok! ] when
+    ] each
+    ok [ counter 0 <= ] [ f ] if ;