# От книгата The Icon programming language, 2nd ed. (R. E. Griswold, M. T. Griswold). # Всеки две последователни букви „a“ от входния текст се заменят с една „b“. # Всеки две последователни букви „b“ от така преобразувания текст се заменят с една „c“. # Двата процеса се реализират от екземпляри на една и съща процедура, повикванията към които # са оформени като съизрази A и B. # Съизразът I чете „буква“ по „буква“ входния поток и заедно с A и B образува конвейер: # A чете от I и извежда в B, който пък извежда в &main – съизраз, съдържащ повикването на # процедурата main. # Променливата B е глобална, за да съществува и така да може да бъде цитирана, когато се # образува съизразът A. Променливата A може и да не бъде глобална. global A, B procedure main() I := create |reads() A := create compact("a", "b", I, B) B := create compact("b", "c", A, &main) while writes(@B) end procedure compact(s1,s2,in,out) local s repeat { s := @in | fail if s == s1 then {s := @in | fail; if s == s1 then s := s2 else s1 @ out} s @ out } end