Для моей теории класса языков вычислений мы получили домашнее задание для реализации части кода на языке, который имеет только инструкции для управления потоком (без операторов if). Это в основном для доказательства того, что вы можете написать язык Turing с полным циклом while.
Для тех из вас, кто может понимать языковые грамматики, вот языковые правила:
S -> S;S | while C do S od | id := E
E -> E + T | T | E - T
T -> T * F | F | F / T
F -> id | cons | (E)
C -> E = E | E > E | E < E | E >= E | E <= E | E != E | C and C | C or C | not(C)
Это скопировано из моих заметок класса, поэтому не обвиняйте меня, если что-то отсутствует или неверно!
Кусок кода для реализации:
if d = 0 do
x := 1
else
x := a / d
Во всяком случае, если вы хотите продолжить и написать, что, используя вышеперечисленные языковые правила, продолжайте. В противном случае, продолжайте и напишите на любом языке, который вам больше всего нравится. Но есть несколько предостережений!
- Нет операторов if или любого другого вида управления потоком, кроме циклов while.
- Нет обмана: грамматика выше не включает никаких операторов break, возвращающих операторов или исключений. Не используйте их.
У меня есть свой кусочек кода, написанный для этого (который я опубликую, чтобы доказать, что это не шоу, которое я написал в сообщении Codez). Мне любопытно, что кто-нибудь еще может придумать.