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

URISC

FALSE

Brainfuck

Примечания[править]

Литература[править]

Code: The Hidden Language of Computer Hardware and Software

Ссылки[править]

Статья на Хабре

Код интерпретатора языка LMCode на github.com