FALSEFALSE — эзотерический язык программирования, созданный в 1993 году Ваутером ван Ортмерссеном с двумя, по его словам, целями:
FALSE стал одним из первых эзотерических языков программирования, в частности он послужил источником вдохновения для автора знаменитого языка Brainfuck. Не будет большим преувеличением сказать, что именно с FALSE началась мода на эзотерические языки программирования. Вместе с тем FALSE — всё ещё достаточно практичный язык программирования. Хотя его и отличает write-only синтаксис, он поддерживает разумный набор операций, в отличие от являющегося реализацией варианта машины Тьюринга Brainfuck, не говоря уже о таких языках как INTERCAL и Malbolge. Источником идей для FALSE был язык Forth, его синтаксис также напоминает синтаксис известного калькулятора dc для UNIX (с обратной польской нотацией). Одним из основных источников сложности при программировании на FALSE является использование экзотических знаков пунктуации (не разделяемых пробелами) вместо форт-слов. Базовые операцииАрифметические операции Достаточно экзотический синтаксис в FALSE имеют стековые операции:
Переменные и подпрограммыПеременные в FALSE обозначаются одной строчной латинской буквой (a-z), все переменные глобальны. Для присваивания переменной значения (взятого с вершины стека) используется операция двоеточие Однако поскольку FALSE — стековый язык, переменные редко бывают нужны для хранения обычных числовых значений. Чаще они используются в роли функций — в них сохраняются лямбда-выражения, например: [1+]i: Это определение функции инкремент, и ей даётся имя i (всё, что находится между '[' и ']' — это и есть лямбда-выражение). Для выполнения лямбда-выражения используется операция Управляющие конструкцииВ FALSE есть две управляющие конструкции if (обозначается a;1=[3b:]? Если a=1, присвоить b значение 3. [a;1=][2f;!]# Пока a=1, применять функцию f к значению 2. Ввод-выводСтроки в FALSE — это всё, что заключено между двумя кавычками a;1=["единица"]? Для вывода целого числа используется операция точка ПримерПример определения функции факториал на FALSE: [$1=$[\%1\]?~[$1-f;!*]?]f: РеализацияFALSE был реализован как написанный на ассемблере для процессоров 68000 компилятор размером 1024 байта и переносимый интерпретатор, написанный на Си (на сайте доступна исполняемая версия для DOS). Имеется также реализация интерпретатора и компилятора для 386 DOS на ANSI Forth. Доступна также реализация FALSE на JavaScript[1]. Варианты FALSEИмеется написанный на ML функциональный вариант языка Strictly False. Ещё одно функциональное расширение FALSE — язык F (Functional False), написанный на K (и реализация «чистого» FALSE на том же языке[2]). owlРазвитием идей FALSE является язык owl (англ. Obfuscated Weird Language), разработанный Antonio Maschio между 2005 и 2006. От FALSE его отличает бо́льшая практическая направленность, расширенный набор операций (с иным символьным обозначением), наличие работы со строками и т.п. В частности, owl различает целые переменные и переменные-функции. Первые обозначаются заглавными буквами, вторые строчными. Для присваивания значений и тем и другим используется запятая В качестве if и while используются символы Операции
Символы скобок используются для ввода-вывода: owl также позволяет подключать inc файлы В owl (что более чем необычно для эзотерических языков) даже можно вставлять в программу комментарии: строчные, начинающиеся с Интерпретатор owl написан на Си и кросс-платформеннен. Под Windows не поддерживаются возможности отладки и профилирования, не работает функции Теперь рассмотрим программу вывода простых чисел на false и её перевод на owl:
999 9 [1-$][\$@$@$@$@\/*=[1-$$[%\1-$@]?0=[\$.' ,\]?]?]#
999 9[1-%][$%2'%2'%2'%2'$/*=[1-%%[;$1-%2']?0=[$%.32)$]?]?]! Следующий пример — программа вычисления факториала. %0>~[?!]?"Factorial of "%." is "%1=[;1.][%1-[%1=~][%2'*$1-]!;.]? Примечания
Ссылки
|