FALSE

FALSE

FALSE — эзотерический язык программирования, созданный в 1993 году Wouter van Oortmerssen-ом с двумя, по его словам, целями:

  1. чтобы можно было написать компилятор для него размером не более одного килобайта.
  2. придумать синтаксис, который бы выглядел шифровкой, случайным набором символов.

FALSE стал одним из первых эзотерических языков программирования, в частности он послужил источником вдохновения для автора знаменитого языка Brainfuck. Не будет большим преувеличением сказать, что именно с FALSE началась мода на эзотерические языки программирования.

Вместе с тем FALSE — всё ещё достаточно практичный язык программирования. Хотя его и отличает write-only синтаксис, он поддерживает разумный набор операций, в отличие от являющегося реализацией варианта машины Тьюринга Brainfuck, не говоря уже о таких чудовищных языках как INTERCAL и Malbolge. Источником идей для FALSE был язык Forth, его синтаксис также напоминает синтаксис известного калькулятора dc для UNIXобратной польской нотацией). Одним из основных источников сложности при программировании на FALSE является использование экзотических знаков пунктуации (не разделяемых пробелами) вместо форт-слов.

Содержание

Базовые операции

Арифметические операции +, -, *, и / берут с вершины стека два верхних элемента и возвращают туда, соответственно, сумму, разность, произведение или частное. Знак подчёркивания _ — это унарная операция изменения знака числа, лежащего на вершине стека. Логические операции в FALSE это бинарные =, >, &, | и унарная операция логического отрицания ~.

Достаточно экзотический синтаксис в FALSE имеют стековые операции:

  • $ - Дублирует вершину стека (в форте DUP): 0 1$ → 0 1 1
  • % - Удаляет вершину стека (DROP): 0 1% → 0
  • \ - Меняет местами два верхних элемента стека (SWAP): 0 1 2\ → 0 2 1
  • @ - Циклическая перестановка трёх верхних элемента стека (ROT): 0 1 2 3@ → 0 2 3 1
  • ø - Копирует n-й элемент стека на вершину (PICK): 7 8 9 2ø → 7 8 9 7

Переменные и подпрограммы

Переменные в FALSE обозначаются одной строчной латинской буквой (a-z), все переменные глобальны.

Для присваивания переменной значения (взятого с вершины стека) используется операция двоеточие :, так 3a: присваивает переменной a значение 3. Чтобы положить значение переменной на стек используется символ точка с запятой ;.

Однако, поскольку FALSE — стековый язык, переменные редко бывают нужны для хранения обычных числовых значений. Чаще они используются в роли функций — в них сохраняются лямбда-выражения, напр.:

[1+]i:

Это определение функции инкремент, и ей даётся имя i (всё, что находится между '[' и ']' — это и есть лямбда-выражение). Для выполнения лямбда-выражения используется операция !, если же оно сохранено в переменной — вызов принимает форму ;! .

Управляющие конструкции

В FALSE есть две управляющие конструкции if (обозначается ?) и while — #. Вот примеры их использования:

a;1=[3b:]?

Если a=1, присвоить b значение 3.

[a;1=][2f;!]#

Пока a=1, применять функцию f к значению 2.

Ввод-вывод

Строки в FALSE — это всё, что заключено между двумя кавычками ". Строку нельзя положить на стек или сохранить в переменной, однако она может быть частью лямбда-выражения. При выполнении строки она просто выводится. Напр.:

a;1=["единица"]?

Для вывода целого числа используется операция точка . , для вывода символа — запятая , . Для чтения символа — операция ^ . Операция ß вызывает сброс (flush) потоков ввода и вывода (stdin, stdout).

Пример

Пример определения функции факториал на FALSE:

[2=$[\%1\]?~[2-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 различает целые переменные и переменные-функции. Первые обозначаются заглавными буквами, вторые строчными. Для присваивания значений и тем и другим используется запятая , а для получения значения или запуска функции — @. Кроме того в виртуальной машине owl присутствует 1 массив, длина которого по умолчанию равна 32Кбайт, для работы с которым используется операции #, и #@ (а также @, и @@ для функций).

В качестве if и while используются символы ? и !, эти операции различают находится на стеке одно или два лямбда-выражения. Так если лямбда-выражений два, ? работает как if … then … else.

Операции ^ и : служат, соответственно, для возведения в степень и извлечение корня. Для работы со стеком используют следующие операции:

команда стековая нотация название в форте
$ ( n1 n2 - n2 n1 ) swap
% ( n - n n ) dup
; ( n - ) drop
' ( x*n m - y*n ) roll
` ( x*n m - x*n n ) pick

Символы скобок используются для ввода-вывода: ( и ) ввод и вывод символа, { и } — ввод и вывод строки, < — ввод чисел (операция меньше — отсутствует, вместо него используется $>).

owl также позволяет подключать inc файлы _]inc.owl[, или запускать внешние owl программы _[file.owl] .

В owl (что более чем необычно для эзотерическх языков) даже можно вставлять в программу комментарии: строчные, начинающиеся с #, или многострочные, помещаемые между (* и *). Строчные комментарии, начинающиеся символом #, позволяют использовать owl для применения в шелл-скриптах.

Интерпретатор owl написан на Си и кроссплатформенен. Под Windows не поддерживаются возможности отладки и профилирования, не работает функции _t для получения текущего времени.

Теперь рассмотрим программу вывода простых чисел на false и её перевод на owl:

false
999 9 [1-$][\$@$@$@$@\/*=[1-$$[%\1-$@]?0=[\$.' ,\]?]?]#
owl
999 9[1-%][$%2'%2'%2'%2'$/*=[1-%%[;$1-%2']?0=[$%.32)$]?]?]!

Следующий пример — программа вычисления факториала.

%0>~[?!]?"Factorial of "%." is "%1=[;1.][%1-[%1=~][%2'*$1-]!;.]?

Примечания

  1. javascript FALSE interpreter
  2. False! in K

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "FALSE" в других словарях:

  • False — False, a. [Compar. {Falser}; superl. {Falsest}.] [L. falsus, p. p. of fallere to deceive; cf. OF. faus, fals, F. faux, and AS. fals fraud. See {Fail}, {Fall}.] 1. Uttering falsehood; unveracious; given to deceit; dishnest; as, a false witness.… …   The Collaborative International Dictionary of English

  • false — adj 1: not genuine, authentic, or legitimate compare counterfeit 2 a: not true or correct; esp: intentionally or knowingly untrue or incorrect injured by false accusations b: intended to mislead or deceive: decept …   Law dictionary

  • false — W3S3 [fo:ls US fo:ls] adj ▬▬▬▬▬▬▬ 1¦(untrue)¦ 2¦(wrong)¦ 3¦(not real)¦ 4¦(not sincere)¦ 5 false economy 6 under false pretences 7 false move/step 8 false imprisonment/arrest ▬▬▬▬▬▬▬ [Date: 900 1000; : Latin; …   Dictionary of contemporary English

  • false — adj 1 False, wrong mean not in conformity with what is true or right. False in all of its senses is colored by its original implication of deceit; the implication of deceiving or of being deceived is strong when the term implies a contrariety… …   New Dictionary of Synonyms

  • false — [fôls] adj. falser, falsest [ME < OFr < fals < L falsus, pp. of fallere, to deceive: see FAIL] 1. not true; in error; incorrect; mistaken [a false argument] 2. untruthful; lying; dishonest [a false witness] 3. disloyal; unfaithful [a… …   English World dictionary

  • false — [ fɔls ] adjective ** 1. ) not true: The report was dismissed as totally false. a false statement/claim/accusation ─ opposite TRUE 2. ) made to look like something real: ARTIFICIAL: false eyelashes a ) not real and intended to trick people: a… …   Usage of the words and phrases in modern English

  • false — [fɔːls ǁ fɒːls] adjective 1. not true or real, but intended to look real in order to deceive people: • false and misleading advertisements • Firms issuing false certificates might be subject to lawsuits. 2. a false economy something that you… …   Financial and business terms

  • False — Это статья об утилите Unix. Статья о эзотерическом языке программирования называется FALSE. false (в переводе с английского «ложное») консольная команда UNIX совместимых операционных систем, единственное действие которой возвратить значение 1,… …   Википедия

  • False — is the antonym of the adjective true.False is the 2nd album of Gorefest, False (album).False may also refer to: * FALSE, an esoteric stack oriented programming language * false, a Unix utilityee also* Contradiction * Falsity * Lie * Falsework, a… …   Wikipedia

  • false — fȯls adj, fals·er; fals·est 1) not corresponding to truth or reality <a test for HIV which gave false results> 2) artificially made <false teeth> 3) of a kind related to or resembling another kind that is usu. designated by the… …   Medical dictionary


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»