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