Хочу с вами поделиться придуманным вчера вечером языком программирования (уж как вышло ;D), да не простым, а эзотерическим (http://ru.wikipedia.org/wiki/%D0%AD%D0%B7%D0%BE%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F). Назвал я его S. В нём существуют только стеки стеков, и ничего более.
Полный список основных (именованных) стеков я пока не придумал. И некоторые проблемы из-за этого встают, но это же не простой язык, чтобы на нём было легко писа́ть!
Сейчас есть такие стеки:
cow (IO → Io → см. мифы др. Греции) – стек ввода-вывода. При вводе он заменяется введённым (так что он совсем фиктивный), при посылке в него значения он его выводит (см. ниже про числовой ввод-вывод).
æ (always empty) аналог "устройства" NUL – при посылке значение теряется, при "забирании" забирается пустой стек.
s,
t – основные и нормальные стеки; вначале пусты.
queen (из queue) –
королева ст замаскированная под стек очередь.
janus (у Януса два лица) – всё, что в него посылается, ложится туда удвоенным. Если послать значение из него в него, там станет три таких значения, и т.п.).
Только одна операция:
. – достать верхний элемент стека (у очереди нижний; в операторе
> теряется, при проверках остаётся на месте). Можно применять неограниченно: элементы – тоже стеки, а, применённая к пустому, она фиктивно отдаст пустой (на этом работает æ).
Оператор
стек1 > стек2 перемещает стек1 наверх стека2. Если стек1 был именованным, ему присваивается пустой стек.
Операторы
ife/ifn стек {операторы}: исполняют свою внутреннюю часть, если стек пустой/не пустой. Аналогично устроенные
we/wn циклятся, пока стек не пустой. То бишь,
we æ: подвесит интерпретатор, если он сделан не очень.
Комментарии обозначаются
/.
При вводе (неотрицательного) числа оно преобразуется в стек с данным числом пустых стеков внутри, другой ввод будет проигнорирован.
При выводе выводится как cтек, так и соответствующее число (справа от).
Можно делать процедуры: они объявляются
имя операторы: и вызываются, как надо, по имени.
Вот пример сложения двух чисел:
triple / утроение верхнего в t
t. > janus
janus. > janus
janus. > t
janus. > t
janus. > t
:
cow > s
cow > t
triple
wn t
t. > s
triple
:
s > cow
Если допустить однобуквенные имена регис стеков как альтернативу:
f t.>j j.>j j.>t j.>t j.>t:c>s c>t f wn t t.>s f:s>c
Как видите, есть множество языков неудобочитаемее. Жаль. :D
Ещё я интересуюсь, Тьюринг- ли полный этот язык. Вроде не совсем...