Lmcode
LMCode — эзотерический язык программирования, основанный на архитектуре Little man computer.
Язык представляет из себя набор команд/ предписаний, следуя которым маленький человечек производит различные операции над числами, а также переходит от одной ячейки памяти данных к другой.
В терминах машины Тьюринга память команд представляет собой набор состояний, в которых может находиться машина, память данных является лентой машины, считывающее устройство является олицетворением маленького человека, выполняющего предписания пользователя.
| Команда LMCode | Описание команды |
|---|---|
| , | Загрузить число из устройства ввода INBOX в аккумулятор |
| . | Выгрузить число из аккумулятора в устройство вывода OUTBOX |
| ~ | Загрузить число из аккумулятора в текущую ячейку памяти данных |
| ^ | Выгрузить число из текущей ячейки памяти данных в аккумулятор |
| > | Перейти к следующей ячейке |
| < | Перейти к предыдущей ячейке |
| + | Прибавить к числу в аккумуляторе число из текущей ячейки памяти данных |
| - | Вычесть из числа в аккумуляторе число из текущей ячейки памяти данных |
| ? | Безусловный переход на метку ! |
| ! | Метка условного перехода ? |
| { | Условный переход на метку } в том случае, если число в аккумуляторе больше или равно нулю |
| } | Метка условного перехода { |
| ( | Условный переход на метку ) в том случае, если число в аккумуляторе равно нулю |
| ) | Метка условного перехода ( |
Примеры программ[править]
Программа, удваивающая введённое число[править]
,~+.
Работает программа так:
Число загружается из устройства ввода в аккумулятор. Далее число загружается из аккумулятора в нулевую ячейку памяти. Число из нулевой ячейки прибавляется к числу в аккумуляторе. Удвоенное число выводится на экран.
Программа, определяющая максимальное число[править]
Перед выполнением программы необходимо загрузить начальные значения в ячейки 0 и 1, после чего вернуться в нулевую ячейку.
,~>,~<
Далее необходимо выполнить следующую программу
^>-{^?}<^!.
Разбор кода:
1. Загружаем число из текущей ячейки памяти в аккумулятор
2. Переходим к следующей ячейке памяти
3. Вычитаем из аккумулятора число, хранящиеся в текущей ячейке памяти
4. Если в аккумуляторе положительное число (или ноль), то переходим на метку }
5. Загружаем число из текущей ячейки памяти в аккумулятор
6. Прыгаем на метку !
7. Переходим на предыдущую ячейку
8. Загружаем число из текущей ячейки памяти в аккумулятор
9. Выводим число из аккумулятора на экран
Числа Фибоначчи[править]
}>>^>+.~<+.~<<^>-<~{
Перед выполнением программы необходимо загрузить в память данных количество циклов, число 1 (декремент цикла), первое число Фибоначчи, т.е. число 1; после чего вернуться в нулевую ячейку.
См. также[править]
CARDboard Illustrative Aid to Computation
Примечания[править]
Литература[править]
Code: The Hidden Language of Computer Hardware and Software