3.8. CONVERT: ПРЕОБРАЗОВАНИЯ МЕЖДУ РАЗЛИЧНЫМИ ТИПАМИ ДАННЫХ

$func TO-LOWER e.Char = e.Char;

$func TO-UPPER e.Char = e.Char;

$func CHARS-TO-BYTES e.Char = e.Int;

$func BYTES-TO-CHARS e.Int = e.Char;

$func TO-CHARS e.Exp = e.Char;

$func TO-WORD e.Exp = s.Word;

$func? TO-INT e.Exp = s.Int;


TO-LOWER преобразует цепочку символов-литер в цепочку литер, в которой все прописные латинские буквы заменены на соответствующие строчные буквы.


TO-UPPER преобразует цепочку символов-литер в цепочку литер, в которой все строчные латинские буквы заменены на соответствующие прописные буквы.


CHARS-TO-BYTES преобразует цепочку символов-литер в последовательность чисел, являющихся их кодами ASCII.


Если аргумент этих функций не является цепочкой символов-литер, результатом является $error(Fname "Invalid argument"), где Fname - имя функции.

Например:

<TO-LOWER 'AbCd+'> => 'abcd+'

<TO-LOWER 25> =>

$error(TO-LOWER "Invalid argument")

<TO-UPPER 'AbCd+'> => 'ABCD+'

<TO-UPPER 25> =>

$error(TO-UPPER "Invalid argument")

<CHARS-TO-BYTES 'ABC'> => 65 66 67


BYTES-TO-CHARS преобразует цепочку целых чисел, каждое из которых лежит в диапазоне от 0 до 255, в цепочку символов-литер, имеющих соответствующие коды ASCII.

Например:

<BYTES-TO-CHARS 65 66 67> => 'ABC'


Функции TO-CHARS, TO-WORD и TO-INT получают на входе произвольное объектное выражение и начинают свою работу с того, что преобразуют его в цепочку литер. Это преобразование выполняется следующим образом. Символы-литеры переходят сами в себя, круглые скобки заменяются на литеры '(' и ')', слова заменяются на цепочки литер, соответствующие их печатным именам, числа заменяются на их изображения в виде цепочек литер, ссылки на строки заменяются на содержимое строк, все прочие ссылки заменяются на некоторые цепочки литер, которые зависят от реализации.

Если размер цепочки литер, полученной в результате вышеописанного преобразования, больше, чем допускается реализацией, результатом работы функций является $error(Fname "Argument too large for conversion").


Дальнейшая работа функций TO-CHARS, TO-WORD и TO-INT происходит следующим образом.


TO-CHARS выдает полученную цепочку литер в качестве результата.

<TO-CHARS "John"> => 'John'

<TO-CHARS 'John'> => 'John'

<TO-CHARS 326> => '326'

<TO-CHARS -326> => '-326'

<TO-CHARS (-326) "John"> => '(-326)John'


TO-WORD преобразует полученную цепочку литер в слово с соответствующим печатным именем.

<TO-WORD "John"> => "John"

<TO-WORD 'John'> => "John"

<TO-WORD 326> => "326"

<TO-WORD -326> => "-326"

<TO-WORD (-326) "John"> => "(-326)John"


TO-INT преобразует полученную цепочку литер в целое число s.Int. Если эта цепочка литер не является правильным изображением целого числа, результатом является $fail(0).

Например:

<TO-INT '326'> => 326

<TO-INT '+326'> => 326

<TO-INT "-3" '26'> => -326

<TO-INT -32 006> => -326

<TO-INT 'John'> => $fail(0)