This replaces the notion of boolean values in conventional languages. Since failure is not indicated by a sentinel value, code becomes cleaner. Comparison operators produce their right-hand side if they succeed. Some expressions can succeed and produce more than one result. These expressions are called generators.
Generators produce multiple results when they are needed by the surrounding expression.
Operations convert operands to needed types when possible. They are immutable values in the same sense that integers are, rather than arrays of changable values. When you perform an operation that looks like it is modifying a string value, what it is really doing is building a new string value. For very large strings, this might be expensive, but on average its not, because strings are very short. String Scanning Icon is designed for string and list processing, and has string scanning facilities found nowhere else.