1."compare" should result in "true" but gives "false" instead. What is wrong?
2. "split at" 'empty' results in a list ("empty-string", 1...[list]...); doesn't make sense. The result should be "(1)" to avoid always to remove the first item for a clean list.
You use text blocks for comparison. The text "0" does not equal "0.". Likewise, "a" does not equal "A". Likewise, "0" does not equal "00". If you use a math comparison block then "0" is the same as "0." and like "00".
Technically, one could consider a string terminating before another as terminating with the NUL ascii character (0), which is less than whatever the next character in the other string would be.
This is a bug. After reviewing the code, the not equals comparison produces the following YAIL (simplified):
(yail-not-equal? "0." "0")
But the problem is that yail-not-equal? actually does a bit more than simply comparing two values, because it also includes the type coercion logic. If the two values fail to compare, App Inventor will try to parse them into their numeric forms and compare again (which is wrong in this scenario). It would be more appropriate for the block to generate something similar to:
(not (string=? "0." "0"))
which is equivalent to the blocks not compare text "0." = "0".
One other thing to mention is that it's not quite an ASCII based sorting as far as I know. I believe that internally the string comparison functions ultimately are underpinned by Java's string comparison logic which can be locale dependent and uses the Unicode character code points, but the logic is effectively the same as @ABG outlined.