Это выглядит иначе — искусство ASCII, которое вычисляет! AsciiDots — это забавный язык, на котором может быть что-то интересное, что можно нам показать.
Основной сущностью в AsciiDots является точка . что, грубо говоря, является переменной, которая мчится по дорожке, состоящей из | и -. Вы также можете использовать \ и /, чтобы сделать углы и+, чтобы дорожки пересекались без взаимодействия. Символы ><^V соединяют T с точкой, движущейся в направлении, в котором символы указывают на T.
Так, например:
/--------->-------
| |
\------/
это петля. Точка, которая входит справа, обходит петлю и выходит так, как она вошла. Программа начинается с точки и заканчивается, когда она выходит из дорожки или когда она проходит над &.
Точка начинается с идентификатора по умолчанию и нулевого значения, и когда она мчится по дорожке, она встречает операторов, которые изменяют значение или идентификатор.
Например: # задает значение, а @ задает идентификатор.
Так:
---#7---
устанавливает значение точки равным семи, когда она проходит.
Оператор $ выводит строку на консоль, когда точка проходит, так что, наконец, «Hello World» в AsciiDots:
.-$"Hello, World!"
Обратите внимание, что программы не должны идти слева направо и сверху вниз. Вы можете запустить программу из любого места, и точка будет следовать по дорожке. Это беспокоит большинство программистов.
Это? является приглашением для ввода и используется только после # или @. Вы также можете использовать ( и ) для отражения точек туда, откуда они пришли. Имейте в виду, что * не является умножением в обычном смысле, вместо этого он дублирует точку и отправляет копии по альтернативным путям.
А как насчет условных условий?
Язык не может быть полным по Тьюрингу без условных обозначений, и у AsciiDots есть очень простое условное обозначение — тильда ~. Это перенаправляет точку, проходящую через него горизонтально вверх, если точка ниже равна нулю. Вы можете превратить это в «не ноль», поставив восклицательный знак под тильдой. Итак, используя пример из руководства:
/-$"The value is not equal to zero"
|
.-~-$"The value is equal to zero"
|
?
#
|
.
Это запрашивает у пользователя значение и выводит соответствующее сообщение.
Есть много других операторов, которые вы можете использовать для изменения значения точки, и вы можете узнать о них в руководстве. Ключевая идея заключается в том, что точка будет ждать другую точку у оператора. Например, чтобы сложить два значения вместе:
.-#?-{+}-$#
|
.-#?--/
Есть некоторые расширенные функции, такие как искажения и библиотеки, но это суть языка.
Есть одна важная вещь, которую нужно прояснить — у вас может быть несколько точек, движущихся по дорожкам одновременно, и точка будет ждать другую точку, когда она встретится с оператором.
Так весело, но зачем беспокоиться?
Хорошо играть с языками, независимо от того, насколько это странно, — хороший способ выяснить, что может сработать, а что нет. Asciidot также является примером языка потока данных, в котором данные передаются через сеть операций с максимальной скоростью. Это хороший способ реализовать параллельную обработку. Наконец, вы можете увидеть поток управления в Asciidot, и это может быть хорошим способом для начинающих.
Мой единственный комментарий после использования его в течение короткого времени заключается в том, что немного утомительно продолжать вводить все эти пробелы, необходимые для выравнивания символов по вертикали. Гораздо проще строить вещи горизонтально. Может ли это быть преодолено с помощью пользовательского редактора? Кроме того, выравнивание по вертикали затруднено, и, наконец, не пытайтесь показать кому-то свою программу шрифтом, который не является монотонным.
AsciiDots — это программа с открытым исходным кодом, и вы можете попробовать ее в Интернете.