Забудьте о кодировке символов
Компилятору Clean не важно, в какой кодировке вы сохранили исходный файл, просто в значениях байтов в файле. Это имеет некоторые аккуратные последствия.
В теле исходного кода разрешены только байты с кодовыми точками, соответствующими печатным символам ASCII, в дополнение к тем, для которых \t\r\n.
литералы:
В Stringи [Char]Литералы ( "stuff"и ['stuff']соответственно) разрешены любые байты, кроме 0 , с оговоркой, что "и 'должны быть экранированы (для Stringи [Char]соответственно), и что новые строки и возвраты Carraige должны быть заменены на \nи \r(также соответственно).
В Charлитералах допускается любой байт, кроме 0 , что означает, что:
'\n'
'
'
То же самое, но второй на один байт короче.
Экранирование:
Кроме стандартных экранированных букв \t\r\n(и т. Д.), Все нечисловые экранирующие последовательности в Clean предназначены либо для косой черты, либо для кавычки, используемой для разграничения литерала, внутри которого находится экранированная буква .
Для числовых escape-последовательностей число обрабатывается как восьмеричное значение, оканчивающееся после трех цифр. Это означает, что если вы хотите, чтобы за нулем следовал символ 1в String, вам нужно использовать "\0001"(или "\0\61"), а не "\01" . Однако, если вы следите за выходом с чем-либо, кроме чисел, вы можете опустить ведущие нули.
Последствия:
Эта причуда с тем, как Clean обрабатывает свои исходные файлы, позволяет Stringи ['Char']эффективно превращается в последовательности из однозначных чисел с 256 базовыми числами, которые имеют множество применений для игры в код, например, для хранения индексов (конечно, до 255).
import StdEnv+a and b(21 байт) не меньше%[a:r]|a= %r=a;%_=True(22 байт)? Или это будетimport StdEnv+a=True and b=True(31 байт), и в этом случае он действительно определенно будет короче? (