Для моей теории класса языков вычислений мы получили домашнее задание для реализации части кода на языке, который имеет только инструкции для управления потоком (без операторов 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
В любом случае, если вы хотите, чтобы идти вперед и написать, что, используя правила языка выше, идти вперед. В противном случае, продолжайте и напишите на любом языке, который вам больше всего нравится. Но есть несколько предостережений!
- Нет утверждений или каких-либо других видов управления потоком, кроме циклов while.
- Нет обмана: грамматика выше не содержит каких-либо инструкций break, операторов возврата или исключений. Не используйте их.
У меня есть мой кусок кода, написанный для этого (который я выложу только для того, чтобы доказать, что это не шоу для меня. Мне любопытно, что кто-нибудь еще может придумать.
+1 за дополнительные усилия, чтобы получить больше отзывов о решении Домашней работы. – Mostlyharmless