Hi,

I have to loop through a string, consecutively replacing substrings with 
single characters, one substring at a time.  Each time through the loop, I 
need to use a cond to check that the length of the last replaced string, is 
shorter than the length of the previous replaced string.

So, as an artificial example, say you have a string "1001110011011", and a 
map or vector of substrings and replacements

( def map_translations 
{
  { "00" "0" },
  { "01" "0" },
  { "10" "0" },
  { "11" "1" }
}

( The resemblance to a conjunction truth table is coincidental.  This is 
the simplest example I could think of. )


So I want to loop through the map of translations several times, each time 
trying to simplify the original expression further, until a result of 
either "-1" or a single character is returned.

If the length of the replaced string is greater than or equal to the length 
of the last replacement, then I'd want to return a "-1" string.

But I can't figure out, how to compare the length of a result of a recur 
assignment, to the length of the PREVIOUS recur assignment.


So, it might look something like this (untested):



( defn simplify-string
  [ s_original-string s_substring s_replacement-character ]
  (
    let [ s_simplified-string ( clojure.string/replace s_original-string 
s_substring s_replacement-character )  ]
    s_simplified-string
  )
)


( defn simplify-dat-guy
  "Loops through a map of substring to character translations,
    attempting to simplify a given expression.
    e.g., '00101' through successive translations would become a shorter 
form
  "
  [ s_exp ]
  ( loop 
    [ [k v] map_longform-shortform-translation s_simplified-expression 
s_exp ] 
        ( recur [ k v ] ( simplify-string s_simplified-expression k v ) )
  )
)


( defn completely-simplify-dat-guy
  "Loops through simplify-dat-guy several times,
    until either a single character or a "-1" is returned.
    e.g., '00101' through successive simplify-dat-guys would eventually 
become "0".
  "
  [ s_exp ]
  ( loop 
    [ s_simplified-expression s_exp ] 
    ( 
      cond
      ( = ( .length s_simplified-expression ) 1 )
        s_simplified-expression
( comment
  I want to put a second condition in here, something like
        ( = ( .length s_simplified-expression ) ( .length 
PREVIOUS_s_simplified_expression ) )
        "-1"
)
        ( recur ( simplify-dat-guy s_simplified-expression ) )
    )
  )
)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to